2011-03-04 4 views
1

私はこのように見えるカップルのテーブルがあります。テーブルとその結合テーブルでSQLクエリを同時に実行できますか?

:私は次のクエリを持って

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

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

そして「多対多の関係」を結ぶ結合テーブルを

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 

これらの2つのクエリを1つにマージする方法はありますか?

+0

2つのクエリをマージするとどういう意味ですか?あなたは何を実際に探していますか? – sashank

答えて

5

あなたはLEFTをしたいあなたは、JOINの代わりに、両方のクエリをマージするために参加しLEFTを使用することができます

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を使用します。この場合の左結合は、一致するかどうかにかかわらず、booksテーブルのすべてのレコードを返します。の一致する行はです。

0

あなたは(コメントありがとう!)使用できます。私はあなたが tags.tag_id = books_tags上のタグを登録しようbooks.book_id = books_tags.book_id ON books_tagsを登録しよう 本から "一つに、これら2つのクエリをマージ"

SELECT BOOK_NAME、タグ名で何を意味するかわかりません。 TAG_ID books.book_id = 283

UNION

books.book_id = 283

本からSELECT BOOK_NAME、 '' 10
+0

"could"、 "should" - UNIONはBOOKSテーブルを2回通過することを意味しますが、OPが望むのはOUTER JOINを使用してOP内で実行できます。コメントのために –

+0

感謝します。あなたが正しいのはアウターも問題を解決する – llazzaro

関連する問題