SQL Join - 显示表,即使第二个连接表没有相关性

时间:2013-07-04 20:24:33

标签: mysql sql

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

我想总是展示活跃的人,即使他们的身份证上没有任何狗。我该如何查询?

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

1 个答案:

答案 0 :(得分:4)

将条件移动到连接(on子句);这样你就可以加入任何与person_idactive标志相匹配的记录。如果未找到有效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