用于选择缺失列的MySQL子查询或LEFT JOIN?

时间:2013-01-23 22:39:30

标签: mysql

我需要对3个表执行SELECT查询,我不知道使用子查询是否比LEFT JOIN更好,因为在某些情况下可能会丢失一列。这些是表格:

选项(名称,信息......)

所有者(姓名,地址)

Rel(idoption,idowner)

SELECT应该在每条记录中返回所有具有所有者名称的选项,但在某些情况下,Option可能没有连接到任何所有者,并且所有者的名称应为空。 有什么建议?提前致谢

3 个答案:

答案 0 :(得分:1)

LEFT JOIN然后,如果有匹配的所有者,它将无论如何都会获得所有选项 - “对左表的额外考虑可以被认为是特殊的保存。左表中的每个项目都会显示出来在MySQL结果中,即使与正在加入的其他表不匹配。“

来自:http://www.tizag.com/mysqlTutorial/mysqlleftjoin.php

答案 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,那么这是更好的方法。