三重连接与SQL?
我的数据库代表一个库。每本书都有多个标签,因此一个标题可能会被标记为“科幻小说”、“短篇小说”和“俄语” 共有三个表:三重连接与SQL?,sql,Sql,我的数据库代表一个库。每本书都有多个标签,因此一个标题可能会被标记为“科幻小说”、“短篇小说”和“俄语” 共有三个表:图书、标签、以及图书标签链接。它们看起来像这样: 书籍 ID | TITLE ----------------------------- 1 | Rendezvous With Rama 2 | Howl and Other Poems 3 | A Short History of Nearly Everything I
图书
、标签
、以及图书标签链接
。它们看起来像这样:
书籍
ID | TITLE
-----------------------------
1 | Rendezvous With Rama
2 | Howl and Other Poems
3 | A Short History of Nearly Everything
ID | TAGNAME
-----------------------------
1 | science fiction
2 | fiction
3 | poetry
标签
ID | TITLE
-----------------------------
1 | Rendezvous With Rama
2 | Howl and Other Poems
3 | A Short History of Nearly Everything
ID | TAGNAME
-----------------------------
1 | science fiction
2 | fiction
3 | poetry
书籍\u标签\u链接
BOOK | TAG
-----------------------------------
1 | 1
1 | 2
2 | 3
希望你能明白这是怎么回事。图书标签链接表有两个外键,将图书链接到标签;每本书都有许多标签,每个标签都与许多书相关联。我不知道这是否是最好的方法,但这就是OSS库程序Calibre所做的,这就是我在学习时用作参考的
现在我要做的是说“选择所有小说”。但我无法找到用SQL表达这种想法的正确方法<代码>选择books.title,其中books.id=tags.id=books\u tag\u link.tag。。。或者别的什么。我不确定
有人能帮我做点什么吗
目前我正在使用SQLite,但MySQL的特定建议也可以。类似的建议
SELECT b.title
FROM Books AS b
JOIN Books_Tag_Link AS bt ON b.id = bt.book
JOIN Tags AS t ON t.id = bt.tag
WHERE t.tagname = 'fiction'
select b.title
from Books b join Books_Tag_Link btl on btl.BOOK=b.ID
join Tags t on t.ID=btl.TAG
where t.TAGNAME='fiction';
警告:如果所有表都很大,您必须确保JOIN中提到的字段都是键(索引)。类似的内容
select b.title
from Books b join Books_Tag_Link btl on btl.BOOK=b.ID
join Tags t on t.ID=btl.TAG
where t.TAGNAME='fiction';
警告:如果所有表都很大,您必须确保JOIN中提到的字段都是键(索引)。类似的内容
select b.title
from Books b join Books_Tag_Link btl on btl.BOOK=b.ID
join Tags t on t.ID=btl.TAG
where t.TAGNAME='fiction';
警告:如果所有表都很大,您必须确保JOIN中提到的字段都是键(索引)。类似的内容
select b.title
from Books b join Books_Tag_Link btl on btl.BOOK=b.ID
join Tags t on t.ID=btl.TAG
where t.TAGNAME='fiction';
警告:如果所有表都很大,则必须确保联接中提到的字段是键(索引)。需要使用两个联接:
select
books.title
from
books
inner join
books_tag_link on
books_tag_link.book = book.id
inner join
tags on
tags.id = books_tag_link.tag
where
tag.tagname = 'fiction'
您需要使用两个联接:
select
books.title
from
books
inner join
books_tag_link on
books_tag_link.book = book.id
inner join
tags on
tags.id = books_tag_link.tag
where
tag.tagname = 'fiction'
您需要使用两个联接:
select
books.title
from
books
inner join
books_tag_link on
books_tag_link.book = book.id
inner join
tags on
tags.id = books_tag_link.tag
where
tag.tagname = 'fiction'
您需要使用两个联接:
select
books.title
from
books
inner join
books_tag_link on
books_tag_link.book = book.id
inner join
tags on
tags.id = books_tag_link.tag
where
tag.tagname = 'fiction'
必须用联接连接表。必须用联接连接表。必须用联接连接表。必须用联接连接表。必须用联接连接表。第一次联接错误。书籍和标签之间没有直接关系。你的第一次加入是错误的。书籍和标签之间没有直接关系。你的第一次加入是错误的。书籍和标签之间没有直接关系。你的第一次加入是错误的。书籍和标签之间没有直接关系。