0

次のようなテーブルがいくつかあります。

____________ ____________
| | 書籍 | | | タグ |
|--------| |--------|
| | book_id | | | タグ ID |
| | ブック名 | | | タグ名 |
 ----------- -----------

そして、「多対多の関係」を接続する結合テーブル:

____________
| | 本/タグ|
|--------|
| | book_id |
| | タグ ID |
 -----------

次のようなクエリを実行したい:

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

それらの間に結合テーブルがあるため、books テーブルをクエリのタグに「アタッチ」する方法はありますか? それとも、tag_id を取得するクエリ、tag_id に一致する book_id を取得するクエリ、tag_id に一致する book_name を取得するクエリの 3 つのクエリを実行する必要がありますか?

4

3 に答える 3

4

はい、できます。JOIN を使用:

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';

これは、'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'
)
于 2011-01-23T10:39:12.253 に答える
2

はい、1 つのクエリでこれを行うことができます。これは a と呼ばれます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';
于 2011-01-23T10:39:05.617 に答える
0

3 つのテーブルすべてを結合する必要があります

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';
于 2011-01-23T10:40:00.983 に答える