使用子查询实现LEFT JOIN

20

是否可以使用子查询实现左连接的等效操作,其中需要多列。 这就是我的意思。

SELECT m.*, (SELECT * FROM model WHERE id = m.id LIMIT 1) AS models FROM make m

目前这样做会导致出现“操作数应只包含1个列”的错误。

是的,我知道可以使用LEFT JOIN实现,但有人告诉我可以用子查询来实现,所以我很想知道如何实现。

2个回答

36

你所提出的建议有很多实际应用。

这个假设的查询将返回至少有一个release_date的任何车型的最新release_date(举例说明),对于没有release_date的车型则返回null:

SELECT m.make_name, 
       sub.max_release_date
  FROM make m
       LEFT JOIN 
           (SELECT id, 
                   max(release_date) as max_release_date
              FROM make 
           GROUP BY 1) sub
       ON sub.id = m.id

10

子查询只能从中返回一个列,因此您需要为每个要从模型表返回的列使用一个子查询。


我确实可以在子查询中返回多列,尽管不是我想要的方式。这个查询返回多列。 SELECT m., models. FROM make m, (SELECT * FROM model LIMIT 1) AS models - Andre
2
子查询可以从FROM和JOIN返回多列,因为在该上下文中您正在处理行。由于在SELECT上下文中仅使用标量,因此您只能从那里的子查询返回一个值。 - MisterZimbu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接