我的表结构基本上是
Sent_txts_parent
Sent_txts_control_parent
Sent_txts_control_child
链接在一起
Sent_txts_parent =顶级
Sent_txts_control_parent链接到Sent_txts_parent通过
Sent_txts_control_parent.parent_id = Sent_txts_parent.id
Sent_txts_control_child通过
链接到Sent_txts_control_parent
Sent_txts_control_child.parent_id = Sent_txts_control_parent.id
我需要运行一个查询,当给定Sent_txts_parent.id
时,需要返回Sent_txts_control_child
中与该ID相关联的所有行。
执行此查询的最佳方法是什么?
可能类似
Select stcc.* from Sent_txts_control_child stcc
left join Sent_txts_control_parent stcp
on stcc.parent_id = stcp.id
left join Sent_txts_parent stp
on stp.parent_id = stcp.parent_id;
但是,我甚至不知道我的连接是否在右侧,也不是最优化的。
答案 0 :(得分:1)
我认为没有任何理由使用外连接。简单的解决方案是:
SELECT cc.*
FROM Sent_txts_control_child AS cc
JOIN Sent_txts_control_parent AS cp ON cc.Parent_ID = cp.ID
JOIN Sent_txts_parent AS st ON cp.Parent_ID = st.ID
WHERE st.ID = ?;
但是,我们可以观察到您给出的值对应于Sent_txts_parent.ID也匹配Sent_txts_control_parent.Parent_ID,因此不需要三重连接;我们可以使用双连接:
SELECT cc.*
FROM Sent_txts_control_child AS cc
JOIN Sent_txts_control_parent AS cp ON cc.Parent_ID = cp.ID
WHERE cp.Parent_ID = ?;
问号代表您要搜索的值。