sql - 如何在 SQL 中实现 bool 标记搜索?

标签 sql database search tags

给定一个项目表、一个标签表和它们之间的一个连接表,什么是实现表单查询的好而有效的方法:

p1 AND p2 AND ... AND pn AND NOT n1 AND NOT n2 ... AND NOT nk

我正在使用 SQL。因此,要找到与所有标签 p1...pn 匹配但不匹配 n1...nk 的所有项目?

是否有好的“标准”解决方案?

最佳答案

如果不知道你的模式很难说,但像这样的东西会起作用:

select article_id from articles
inner join tag t1 on t1.article_id=articles.article_id and t1.tag='included_tag'
inner join tag t2 on t2.article_id=articles.article_id and t2.tag='another_included_tag'
left outer join tag t3 on t3.article_id=articles.article_id and t3.tag='dont_include_tag'
left outer join tag t4 on t4.article_id=articles.article_id and t4.tag='also_dont_include_tag'
where t3.tag_id is null and t4.tag_id is null

对要包含的标签进行内连接,对不包含的标签进行反连接(外连接+必填列为空)

关于sql - 如何在 SQL 中实现 bool 标记搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/602849/

相关文章:

php - 使用 MySQL 进行多区域市场数据库设计

php - 确定值列表是否完全满足一对多关系的最有效方法(MySQL)

c# - 二分查找中的比较计数

javascript - 使用 jQuery 搜索项目的简单搜索功能不起作用

sql - 对象变化时是否需要重新创建Oracle同义词?

MYSQL Sakila 数据库 - 查找尚未租借电影的客户列表

sql - 如何使用 sql server 执行 BEFORE UPDATED 触发器?

magento - 在Elasticsearch中搜索T恤不退还T恤

sql - 将日期名称转换为其整数表示形式

php - 为用户报价创建唯一 ID