我将两张桌子连在一起,一张照片"照片"表和"地点"表。每个位置可能有也可能没有与之关联的默认图片,如果有,我想返回该照片名称。如果它没有,则返回null。每个位置的默认图像(如果存在)始终是具有" PictureSort"的图像。值为1。
从我下面的第一次SQL尝试开始,如果我使用WHERE语句,那么我就不会收到空位置(该位置不存在照片)。
SELECT a.LocationID, a.LocationName, b.PictureSort, b.PictureName
FROM Locations AS a
LEFT JOIN Photos AS b ON a.LocationID = b.LocationID
WHERE b.PictureSort = '1'
GROUP BY a.LocationID
我也尝试在mySQL中使用MIN()函数来说明我在PictureSort列中的最低值,虽然这对该列有用,但是它旁边的列PictureName并不跟随并返回PictureSort列的关联值。
SELECT a.LocationID, a.LocationName, MIN(b.PictureSort) AS PictureSort, b.PictureName
FROM Locations AS a
LEFT JOIN Photos AS b ON a.LocationID = b.LocationID
GROUP BY a.LocationID
非常感谢任何帮助。我希望这可以工作,但我也在寻找最便宜的查询来完成这项工作。
谢谢!
答案 0 :(得分:1)
第二个表格的条件应该在on
的{{1}}子句中。
此外,您的表别名应与表的名称相关。并且不需要left join
。所以试试这个:
GROUP BY
如果SELECT l.LocationID, l.LocationName, p.PictureSort, p.PictureName
FROM Locations l LEFT JOIN
Photos p
ON p.LocationID = l.LocationID AND b.PictureSort = '1';
存储为数字,则删除单引号。不要混合数据类型。