帮助构建最佳查询

时间:2011-04-04 00:14:12

标签: php mysql

我的表结构基本上是

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;

但是,我甚至不知道我的连接是否在右侧,也不是最优化的。

1 个答案:

答案 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 = ?;

问号代表您要搜索的值。