是否可以通过subselect完成LEFT JOIN的等效操作,其中需要多列。 这就是我的意思。
SELECT m.*, (SELECT * FROM model WHERE id = m.id LIMIT 1) AS models FROM make m
现在这样做会给我一个'操作数应该包含1列'的错误。
是的我知道LEFT JOIN可以做到这一点,但我被告知可以通过subselect我很好奇它是如何完成的。
答案 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)
子选择只能从中返回一列,因此您需要为每个要从模型表返回的列进行一个子选择。