sqlite – 从多个关系中匹配

我有一个“帖子”表.每个帖子记录可以有一个或多个标签.
 如果我将标记存储到单个列中,作为逗号分隔的字符串,我可以轻松找到标记为“Abc”并标记为“Def”的帖子,甚至可以进行部分匹配.

我正在使用sqlite和这个方法的“FTS”表,它工作正常,但有人告诉我这是一个不好的做法,我应该将标签存储在不同的表中并使用JOIN.
如果我将标记存储在不同的表中并在这两个表之间创建关系,如何在单个查询中找到标记为“Abc”和标记为“Def”的帖子?可能吗?

这确实是糟糕的设计实践.

由于您需要对列值执行字符串操作以分隔标记,因此性能会降低.所以索引不能使用.这违反了数据库设计的规范化规则.

一个更好的设计

tags table
----------
id
name


posts table
-----------
id
title
body
...


post_tags table
---------------
post_id
tag_id

要获得所有帖子都有两个标签

select p.id, p.title, p.body
from posts p
join post_tags pt on pt.post_id = p.id
join tags t on pt.tag_id = t.id
where t.name in ('abc','def')
group by p.id, p.title, p.body
having count(distinct t.id) = 2
相关文章
相关标签/搜索