2011-03-04 57 views
1

我有一個看起來像這樣的情侶表:我可以同時對一個表及其連接表執行SQL查詢嗎?

 
___________ ___________ 
| 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 

有沒有辦法將這兩個查詢合併爲一個?

+0

通過合併兩個查詢,你的意思是什麼?你在找什麼? – sashank

回答

5

你想要一個LEFT JOIN

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

做第一個查詢,但使用LEFT JOIN作爲第一個連接子句。在這種情況下,左連接爲您提供書籍表中的所有記錄,無論匹配如何,以及均加入的匹配行。

0

你可以(感謝您的評論!)使用聯合。我不知道你的意思 「這兩個查詢合併成一個」

SELECT BOOK_NAME,TAG_NAME從書本 JOIN books_tags ON books.book_id = books_tags.book_id JOIN標籤ON tags.tag_id = books_tags什麼。 TAG_ID WHERE books.book_id = 283

UNION

SELECT BOOK_NAME, '' 從書本WHERE books.book_id = 283

+0

「可以」,而不是「應該」 - UNION意味着兩次通過BOOKS表,但OP想要的內容可以在一個使用OUTER JOIN中完成。 –

+0

感謝您的評論。你是正確的外部也解決了這個問題 – llazzaro

相關問題