17

在需要多列的情况下,可以使用子选择完成相当于 LEFT JOIN 的操作。这就是我的意思。

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

就目前而言,这样做会给我一个“操作数应包含 1 列”错误。

是的,我知道使用 LEFT JOIN 可以做到这一点,但有人告诉我,使用 subselect 可以做到这一点,我很好奇它是如何完成的。

4

2 回答 2

30

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

这个假设的查询将返回最近的release_date(人为的例子)对于任何至少有一个的 make release_date,并且对于任何没有 no 的 make 返回 null release_date

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
于 2010-03-18T00:01:43.583 回答
8

子选择只能从其中返回一列,因此对于要从模型表中返回的每一列,您都需要一个子选择。

于 2010-03-17T23:41:22.327 回答