在需要多列的情况下,可以使用子选择完成相当于 LEFT JOIN 的操作。这就是我的意思。
SELECT m.*, (SELECT * FROM model WHERE id = m.id LIMIT 1) AS models FROM make m
就目前而言,这样做会给我一个“操作数应包含 1 列”错误。
是的,我知道使用 LEFT JOIN 可以做到这一点,但有人告诉我,使用 subselect 可以做到这一点,我很好奇它是如何完成的。
在需要多列的情况下,可以使用子选择完成相当于 LEFT JOIN 的操作。这就是我的意思。
SELECT m.*, (SELECT * FROM model WHERE id = m.id LIMIT 1) AS models FROM make m
就目前而言,这样做会给我一个“操作数应包含 1 列”错误。
是的,我知道使用 LEFT JOIN 可以做到这一点,但有人告诉我,使用 subselect 可以做到这一点,我很好奇它是如何完成的。
您的建议有很多实际用途。
这个假设的查询将返回最近的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
子选择只能从其中返回一列,因此对于要从模型表中返回的每一列,您都需要一个子选择。