可以跨两个表执行SQL查询吗?

可以跨两个表执行SQL查询吗?,sql,many-to-many,jointable,Sql,Many To Many,Jointable,我有两张这样的桌子: ___________ ___________ | Books | | Tags | |-----------| |-----------| | book_id | | tag_id | | book_name | | tag_name | ----------- ----------- 有没有办法将books表“附加”到查询中的标记上,因为它们之间有一个联接表?或者我必须做三个查询,一个是获取标签id,另一个是获取与标签

我有两张这样的桌子:

___________ ___________ | Books | | Tags | |-----------| |-----------| | book_id | | tag_id | | book_name | | tag_name | ----------- -----------
有没有办法将books表“附加”到查询中的标记上,因为它们之间有一个联接表?或者我必须做三个查询,一个是获取标签id,另一个是获取与标签id匹配的图书id,第三个是获取与标签id匹配的图书名称?

是的,您可以在一个查询中完成此操作,这称为
连接

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

是的,您可以在一个查询中执行此操作,此查询称为
连接

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

是的,你能做到;通过连接:

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

您将需要联接所有三个表

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

我真的不明白你的问题。您想要什么输出?SELECT列中的tag_名称不是多余的吗?它只能返回你正在搜索的“小说”?我真的不明白你的问题。您想要什么输出?SELECT列中的tag_名称不是多余的吗?它只能返回你正在搜索的“小说”吗?