2010-03-17 5 views
12

Возможно выполнить эквивалент LEFT JOIN с подзапросом, где требуется несколько столбцов. Вот что я имею в виду.Использование subselect для выполнения LEFT JOIN

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

Как сейчас, это означает, что «Операнд должен содержать 1 столбец».

Да, я знаю, что это возможно с LEFT JOIN, но мне сказали, что это возможно с подзапросом, мне любопытно, как это делается.

ответ

7

В подзапросе может быть только один столбец, возвращенный из него, поэтому для каждого столбца, который вы хотите вернуть из таблицы модели, вам понадобится один подзабор.

+0

Я действительно может возвращать несколько столбцов в подвыборки хотя и не так, как я хочу. Этот запрос возвращает несколько столбцов. SELECT m. *, Models. * FROM make m, (SELECT * FROM model LIMIT 1) Модели AS – Andre

+1

Подзапросы могут возвращать более одного столбца из FROM и JOINs, так как вы работаете со строками в этом контексте. Поскольку вы работаете со скалярами только в контексте SELECT, вы можете вернуть только одно значение из подзапроса. – MisterZimbu

+0

Согласовано. Спасибо. – Andre

16

Существует много практических применений, которые вы предлагаете.

Этот гипотетический запрос вернет самый последний release_date (надуманный пример) для любого сделать, по крайней мере, один release_date и нуль для любого сделать без каких-либо 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 
Смежные вопросы