0

我有两张桌子,一张是人,另一张是每个人拥有的各种狗。我只想查询一次数据库。

我想始终显示活跃的人,即使他们的身份证上没有任何狗。我将如何查询这个?

SELECT person.*, dog.* 
FROM person 
LEFT OUTER JOIN dog ON person.id = dog.person_id AND 
WHERE person.active=true and dog.active=true
4

1 回答 1

4

将条件移到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
于 2013-07-04T20:28:11.893 回答