0

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

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

业主(姓名、地址)

Rel (idoption, idowner)

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

4

3 回答 3

1

LEFT JOIN 然后,无论是否有匹配的所有者,它都会获得所有选项 - “对左表的这种额外考虑可以被认为是一种特殊的保存。左表中的每个项目都将显示在 MySQL 中结果,即使与它所连接的另一个表不匹配。”

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

于 2013-01-23T22:42:18.210 回答
1

ALEFT 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
于 2013-01-23T22:44:28.360 回答
0

左连接将比子查询更有效和更快。如果您可以在没有匹配的情况下使用 NULL,那么这是更好的方法。

于 2013-01-23T22:42:58.177 回答