【问题标题】:Can I do an SQL query on a table and its join table at the same time?我可以同时对一个表及其连接表执行 SQL 查询吗?
【发布时间】:2011-03-04 05:15:20
【问题描述】:

我有几个如下所示的表格:

___________ ___________ |书籍 | |标签 | |-----------| |-----------| | book_id | | tag_id | |书名 | |标签名 | ------------ ------------

还有一个连接“多对多关系”的连接表:

___________ |书籍/标签| |-----------| | 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

有没有办法将这两个查询合并为一个?

【问题讨论】:

  • 合并两个查询是什么意思?你到底在找什么?

标签: sql join


【解决方案1】:

你想要一个左连接

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 

【讨论】:

    【解决方案2】:

    执行您的第一个查询,但在第一个连接子句中使用 LEFT JOIN。在这种情况下,左连接会为您提供 books 表中的所有记录,无论匹配如何,以及 连接的匹配行。

    【讨论】:

      【解决方案3】:

      您可以(感谢您的评论!)使用 union 。我不确定您所说的“将这两个查询合并为一个”是什么意思

      从书本中选择书名、标签名 加入 books_tags ON books.book_id = books_tags.book_id 加入标签 tags.tag_id = books_tags.tag_id WHERE book.book_id = 283

      联合

      SELECT book_name,'' FROM books WHERE book.book_id = 283

      【讨论】:

      • “可以”,而不是“应该”——UNION 意味着两次通过 BOOKS 表,但是 OP 想要的可以使用 OUTER JOIN 一次性完成。
      • 感谢您的评论。你是对的,外部也解决了问题
      【解决方案4】:

      您可以使用 LEFT JOIN 而不是 jOIN 来合并两个查询。

      看看this documentation

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-08
        • 2022-06-15
        • 2012-09-22
        • 1970-01-01
        • 2021-08-22
        • 2020-06-29
        • 1970-01-01
        相关资源
        最近更新 更多