2011-01-23 67 views
0

我有一個看起來像這樣的情侶表:是否可以跨兩個表執行SQL查詢?

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

和連接連接表中「多對一對多關係」:

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

我想做一個查詢的親切是這樣的:

SELECT book_name, tag_name FROM books, tags WHERE tag_name = 'fiction' 

有沒有什麼辦法可以將書籍表「附加」到查詢中的標籤,因爲它們之間有聯接表?或者我必須做三個查詢:一個是獲取tag_id,另一個是獲取與tag_id匹配的book_id,另一個是獲取與book_id匹配的book_name?

+0

我真的不明白你的問題。你想要什麼輸出? – Spredzy

+0

SELECT列中的tag_name不是冗餘嗎?它只能返回你正在搜索的'小說'? – RichardTheKiwi

回答

4

是你可以做的;加入:

SELECT b.book_name, t.tag_name FROM books b 
JOIN books_tags bt ON bt.book_id=b.book_id 
JOIN tags t ON t.tag_id=bt.tag_id 
WHERE t.tag_name = 'fiction'; 

這將返回一個有'小說'標籤的書籍清單。

或者你可以用子查詢做到這一點:

SELECT b.book_name FROM books b WHERE id IN (
    SELECT bt.book_id FROM books_tags bt 
    WHERE bt.tag_id IN (
     SELECT t.tag_id FROM tags t WHERE t.tag_name='fiction' 
    ) 
) 

或者:

SELECT b.book_name FROM books b WHERE EXISTS (
    SELECT 1 FROM books_tags bt 
    JOIN tags t ON t.tag_id=bt.tag_id 
    WHERE t.tag_name='fiction' 
) 
2

是你可以在一個查詢做到這一點,這就是所謂的JOIN

SELECT book_name, tag_name FROM books 
    JOIN bookTags ON books.book_id = bookTags.book_id 
    JOIN tags ON booksTags.tag_id = tags.tag_id 
    WHERE tag_name = 'fiction'; 
+0

失蹤在哪裏條件 – RichardTheKiwi

+0

@cyberkiwk,固定。 – driis

0

,你需要加入所有三個表

SELECT books.book_name, books.tag_name FROM books, bookTags, Tags 
WHERE books.book_id = bookTags.book_id 
AND booksTags.tag_id = Tags.tag_id 
and Tag.tag_name = 'fiction'; 
相關問題