我需要对 3 个表执行 SELECT 查询,但我不知道使用子查询是否比 LEFT JOIN 更好,因为在某些情况下可能会丢失一列。这些是表格:
选项(名称、信息...)
业主(姓名、地址)
Rel (idoption, idowner)
SELECT 应返回每条记录中带有所有者名称的所有选项,但在某些情况下,选项可能未连接到任何所有者,并且所有者的名称应为空。有什么建议么?提前致谢
我需要对 3 个表执行 SELECT 查询,但我不知道使用子查询是否比 LEFT JOIN 更好,因为在某些情况下可能会丢失一列。这些是表格:
选项(名称、信息...)
业主(姓名、地址)
Rel (idoption, idowner)
SELECT 应返回每条记录中带有所有者名称的所有选项,但在某些情况下,选项可能未连接到任何所有者,并且所有者的名称应为空。有什么建议么?提前致谢
LEFT JOIN 然后,无论是否有匹配的所有者,它都会获得所有选项 - “对左表的这种额外考虑可以被认为是一种特殊的保存。左表中的每个项目都将显示在 MySQL 中结果,即使与它所连接的另一个表不匹配。”
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
左连接将比子查询更有效和更快。如果您可以在没有匹配的情况下使用 NULL,那么这是更好的方法。