MySQL JOIN从辅助表

时间:2017-12-05 17:08:14

标签: mysql sql

我将两张桌子连在一起,一张照片"照片"表和"地点"表。每个位置可能有也可能没有与之关联的默认图片,如果有,我想返回该照片名称。如果它没有,则返回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

非常感谢任何帮助。我希望这可以工作,但我也在寻找最便宜的查询来完成这项工作。

谢谢!

1 个答案:

答案 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'; 存储为数字,则删除单引号。不要混合数据类型。