我有几张看起来像这样的表:
___________ ___________ | 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
有没有办法将这两个查询合并为一个?
答案 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来合并两个查询。