我有两张桌子,
a)专辑
b)中的图片
我使用以下查询选择albums.id,albums.cover_picture_id,pictures.url其中albums.cover_picture_id = pictures.id,我想执行以下操作
select all the values from albums
,但它也应该参考albums.cover_picture_id来获取pictures.url
我的目的是使用以下SELECT STATEMENT
SELECT
albums.id,
albums.cover_picture_id,
pictures.url
FROM albums
JOIN pictures
ON
(
albums.cover_picture_id = pictures.id
)
它工作正常但我在这里有一个问题,表实体albums.cover_picture_id可能包含picture.id中不存在的值0所以如果它找到0它将不会获取值,我想要获取所有相册表中的相册,即使它找到0.如何在select语句中添加该子句。
谢谢
答案 0 :(得分:3)
尝试将JOIN
更改为LEFT JOIN
,因为您希望包含albums
中的所有记录,即使pictures
中没有匹配记录:
SELECT
albums.id,
albums.cover_picture_id,
pictures.url
FROM albums
LEFT JOIN pictures
ON
(
albums.cover_picture_id = pictures.id
)
答案 1 :(得分:3)
像这样使用LEFT JOIN
:
SELECT
albums.id,
albums.cover_picture_id,
pictures.url
FROM albums
LEFT JOIN pictures
ON
(
albums.cover_picture_id = pictures.id
)
摘自维基百科:
表A和B的左外连接(或简称左连接)的结果始终包含“左”表(A)的所有记录,即使连接条件未在“”中找到任何匹配记录右“表(B)。这意味着如果ON子句与B中的0(零)记录匹配,则连接仍将在结果中返回一行 - 但在B中的每列中都为NULL。这意味着左外连接返回左边的所有值table,加上右表中的匹配值(如果没有匹配的连接谓词,则为NULL)。如果右表返回一行而左表返回多个匹配行,则右表中的值将对左表中的每个不同行重复。