我正在尝试编写一个 SQL 语句,它允许我根据关键字从表中选择一系列文章。到目前为止,我得到的是一个令牌表、一个文章表和一个用于令牌和文章的多对多表:
tokens
rowid
token
token_article
token_rowid
article_rowid
articles
rowid
我正在做的是进行搜索查询,将其按空格分隔,然后选择包含这些关键字的所有文章。到目前为止,我想出了这个:
select * from
(select * from tokens
inner join token_article on
tokens.rowid = token_article.token_rowid and
token = 'ABC'
) as t1,
(select * from tokens
inner join token_article on
tokens.rowid = token_article.token_rowid and
token = 'DEF'
) as t2
where t1.article_rowid = t2.article_rowid and t2.article_rowid = articles.rowid
哪个有效,但当然它对匹配 ABC 的所有文章和 DEF 然后选择它们的所有文章进行选择。
现在我正在尝试找出更好的方法。我认为可行的方法是选择所有与 ABC 匹配的文章,以及从那些与 DEF 匹配的文章中。这是我想象的样子但不起作用(收到错误消息“没有这样的列:tokens.rowid”)
select * from
(select * from
(select * from tokens
inner join token_article on
tokens.rowid = token_article.token_rowid and
token = 'ABC'
)
inner join token_article on
tokens.rowid = token_article.token_rowid and
token = 'DEF'
)