Могу ли я выполнить SQL-запрос к таблице и к ее таблице соединений одновременно? - PullRequest
1 голос
/ 04 марта 2011

У меня есть пара таблиц, которые выглядят следующим образом:

 ___________    ___________
| Books     |  | Tags      |
|-----------|  |-----------|
| book_id   |  | tag_id    |
| book_name |  | tag_name  |
 -----------    ----------- 

И таблица соединений, которая связывает "отношение многих ко многим":

 ___________
| Books/Tags|
|-----------|
| book_id   |
| tag_id    |
 -----------

У меня естьследующий запрос:

SELECT book_name, tag_name FROM books 
JOIN books_tags ON books.book_id = books_tags.book_id 
JOIN tags ON tags.tag_id = books_tags.tag_id 
WHERE books.book_id = 283

И следующее (для книг без тегов):

SELECT book_name FROM books WHERE books.book_id = 283

Есть ли способ объединить эти два запроса в один?

Ответы [ 4 ]

5 голосов
/ 04 марта 2011

Вы хотите ЛЕВОЕ присоединение

SELECT book_name, 
       tag_name 
FROM   books 
       LEFT JOIN books_tags 
         ON books.book_id = books_tags.book_id 
       LEFT JOIN tags 
         ON tags.tag_id = books_tags.tag_id 
WHERE  books.book_id = 283 
0 голосов
/ 04 марта 2011

Вы можете использовать левое соединение вместо jOIN для объединения обоих запросов.

Взгляните на эту документацию .

0 голосов
/ 04 марта 2011

Вы можете (спасибо за комментарий!) Использовать union.Я не уверен, что вы имеете в виду под «объединить эти два запроса в один»

ВЫБЕРИТЕ имя_объекта, имя_ тега ИЗ книг ПРИСОЕДИНЯЙТЕСЬ books_tags ON books.book_id = books_tags.book_id ПРИСОЕДИНЯЙТЕСЬ к тегам ON tags.tag_id = books_tags.tag_id ГДЕ books.book_id = 283

СОЮЗ

ВЫБЕРИТЕ имя_блока, '' ИЗ ГДЕ books.book_id = 283

0 голосов
/ 04 марта 2011

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

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