LEFT JOIN包括不存在的记录

时间:2014-07-19 19:40:07

标签: mysql

我有两张桌子:

属性 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)

2 个答案:

答案 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部分进行测试,您实际上可以看到它。