我可以同时对表及其连接表执行SQL查询吗?

时间:2011-03-04 05:15:20

标签: sql join

我有几张看起来像这样的表:

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

连接“多对多关系”的连接表:

 ___________
| Books/Tags|
|-----------|
| 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

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

4 个答案:

答案 0 :(得分:5)

您想要一个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 

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

  

SELECT book_name,tag_name FROM books   JOIN books_tags ON books.book_id =   books_tags.book_id JOIN标签ON   tags.tag_id = books_tags.tag_id WHERE   books.book_id = 283

     

UNION

     

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

答案 3 :(得分:0)

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

看看this documentation