我有两个表:
属性
property_id、col1、col2 ...
图片
image_id、property_id、serial、...
图像表中的序列号仅为 1,2,3,4...(最多为属性拥有的图像数量)。 Serial=1 表示默认图像。
我想仅使用默认图像来获取所有属性。所以我这样做:
SELECT * FROM properties p
LEFT JOIN images i ON p.property_id = i.property_id
WHERE i.serial=1
效果非常好。但我注意到许多特性根本没有图像。所以它们不会出现在结果中。我还想选择所有那些根本没有任何图像的属性。我怎样才能做到这一点?
编辑:
我可以做类似的事情吗
WHERE (i.serial = 1 OR count(i.serial)=0)
最佳答案
如果使用外联接并对联接表设置条件,则必须在联接条件中包含此条件。
SELECT
*
FROM
properties p
LEFT JOIN
images i
ON
p.property_id = i.property_id
AND
i.serial=1
如果在 WHERE 子句中使用此条件,则会将 OUTER 联接隐式更改为 INNER 联接。
关于mysql - LEFT JOIN 包含不存在的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24844259/