使用subselect完成LEFT JOIN

时间:2010-03-17 23:36:49

标签: sql subquery multiple-columns

是否可以通过subselect完成LEFT JOIN的等效操作,其中需要多列。 这就是我的意思。

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

现在这样做会给我一个'操作数应该包含1列'的错误。

是的我知道LEFT JOIN可以做到这一点,但我被告知可以通过subselect我很好奇它是如何完成的。

2 个答案:

答案 0 :(得分:21)

您的建议有许多实际用途。

对于任何至少有一个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

答案 1 :(得分:7)

子选择只能从中返回一列,因此您需要为每个要从模型表返回的列进行一个子选择。