Игнорирование таблиц без совпадений - PullRequest
0 голосов
/ 09 декабря 2011

Интересно, можно ли заставить запрос игнорировать таблицу, если в этой таблице нет совпадений, но показаны совпадения из других таблиц? Допустим, у меня есть три таблицы, и я использую такой запрос:

SELECT table1.username, table2.age, table3.something_else FROM table1, table2, table3 
WHERE (table1.id = 37)
AND (table2.id = table1.id)
AND (table3.id = table1.id)

Так что это работает, если идентификатор существует во всех таблицах, но если идентификатор не существует ни в одной из таблиц, запрос вообще не будет возвращать никаких значений. Как бы я написал запрос, если бы я возвратил столбцы, где этот идентификатор существует?

1 Ответ

3 голосов
/ 09 декабря 2011

используйте левое соединение

Например

SELECT table1.username, table2.age, table3.something_else
FROM table1
LEFT JOIN table2 ON (table2.id = table1.id)
LEFT JOIN table3 ON (table3.id = table1.id)
WHERE (table1.id = 37)

Когда вы включаете дополнительные таблицы, используя запятую, вы делаете неявное JOIN, но это внутреннее соединение.

Читайте о JOINs здесь

А пока вот хорошее итоговое изображение:

Visual description of join types

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...