我需要对3个表执行SELECT查询,我不知道使用子查询是否比LEFT JOIN更好,因为在某些情况下可能会丢失一列。这些是表格:
选项(名称,信息......)
所有者(姓名,地址)
Rel(idoption,idowner)
SELECT应该在每条记录中返回所有具有所有者名称的选项,但在某些情况下,Option可能没有连接到任何所有者,并且所有者的名称应为空。 有什么建议?提前致谢
答案 0 :(得分:1)
LEFT JOIN然后,如果有匹配的所有者,它将无论如何都会获得所有选项 - “对左表的额外考虑可以被认为是特殊的保存。左表中的每个项目都会显示出来在MySQL结果中,即使与正在加入的其他表不匹配。“
答案 1 :(得分:1)
LEFT JOIN
可能是适当的响应,并且可能比子查询更快,具体取决于您的结果(它们可能会编译到同一个计划中)。
SELECT
op.name
,op.info
,...
,ow.name
,ow.address
FROM
options op
LEFT OUTER JOIN
Rel r
ON r.idoption = op.id
LEFT OUTER JOIN
owners ow
ON ow.id = r.idowner
答案 2 :(得分:0)
左连接比子查询更有效,更快。如果你可以在没有匹配的情况下使用NULL,那么这是更好的方法。