我有两张桌子,一张是人,另一张是每个人拥有的各种狗。我只想查询一次数据库。
我想始终显示活跃的人,即使他们的身份证上没有任何狗。我将如何查询这个?
SELECT person.*, dog.*
FROM person
LEFT OUTER JOIN dog ON person.id = dog.person_id AND
WHERE person.active=true and dog.active=true
将条件移到join(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