我有两张桌子:
属性
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)
答案 0 :(得分:1)
如果使用外连接并在连接表上具有条件,则必须在连接条件中包含此条件。
SELECT
*
FROM
properties p
LEFT JOIN
images i
ON
p.property_id = i.property_id
AND
i.serial=1
如果在WHERE子句中使用此条件,则将OUTER连接隐式更改为INNER连接。
答案 1 :(得分:0)
你快到了:
SELECT * FROM properties p
LEFT JOIN images i ON p.property_id = i.property_id
WHERE i.serial IN (1,NULL)
对于没有图像的每个属性,图像表中的所有值都将在结果中为NULL
。所以你必须考虑到这一点。如果您遗漏WHERE
部分进行测试,您实际上可以看到它。