这是我的疑问:
select dr.*, v.hash, d.* from directory d
left join directory_relations dr on d.id = dr.directory_id
left join videos v on dr.video_id = v.id
这是结果: 结果只有5行,但在directory_relations中是6行。 表: directory_relations
表:目录
看起来喜欢错过有关VIDEO的数据。但我不知道为什么,因为在VIDEO表格中存在id为14059的行。
答案 0 :(得分:0)
您的第一个left join
保留directory
表中的所有行,而不是directory_relations
中的行。为了保留这两者,你需要一个full outer join
,但MySQL不支持该操作。要模拟它,您可以编写像
select t1.*, v.hash
from (
select dr.*, d.id as d_id, d.name, d.user_id
from directory d
left join
directory_relations dr
on d.id = dr.directory_id
union
select dr.*, d.id as d_id, d.name, d.user_id
from directory_relations dr
left join
directory d
on d.id = dr.directory_id
) t1
left join
videos v
on t1.video_id = v.id
答案 1 :(得分:0)
您正在使用LEFT JOIN,它将返回左表中的所有行,以及右表中具有匹配项的所有行。这就是ID = 9的原因不会被退回:因为它出现在右边的桌子上,但是左边的桌子上没有ID = 0的目录。
您可能希望切换表的顺序......或者您可能希望在目录表中添加ID = 0的目录,但哪种解决方案更好取决于数据库的逻辑。