我有两张桌子,一张是人,另一张是每个人拥有的各种狗。我想只查询一次数据库。
我想总是展示活跃的人,即使他们的身份证上没有任何狗。我该如何查询?
SELECT person.*, dog.*
FROM person
LEFT OUTER JOIN dog ON person.id = dog.person_id AND
WHERE person.active=true and dog.active=true
答案 0 :(得分:4)
将条件移动到连接(on
子句);这样你就可以加入任何与person_id
和active
标志相匹配的记录。如果未找到有效dog
,则结果中仍会显示person
。
如果在where
子句中添加条件,首先评估左连接,然后评估所有不是活动狗的记录(包括那些根本没有狗的记录)被过滤掉了。如果您这样做,它会有效地将您的left join
变为inner join
。
SELECT
person.*,
dog.*
FROM
person
LEFT JOIN dog ON person.id = dog.person_id AND dog.active=true
WHERE
person.active=true