sql - SQLite:标签和产品的交集
问题描述
我是 SQLite 的新手,正在寻找一种方法来创建查询以执行以下操作:
我有 3 张桌子:
goods: List of goods
tags: list of tags
tag_goods: table used to associate a tag to a product
这是每个表的结构:
商品:
id (INTEGER, autoincrement)
name (TEXT, name of the product)
标签:
id (INTEGER, autoincrement)
name (TEXT, name of the tag)
标签商品:
tag_id (INTEGER)
goods_id (INTEGER)
UNIQUE (tag_id, goods_id)
我想要的是:
仅获取标有所有可能标签的产品的 ID 和名称(注意:我需要引用查询中的所有标签,而不是一一引用)。
(意思是,例如我只有四个标签:“黄色”、“圆形”、“可食用”、“有机”,只有商品“奶酪”和“甜瓜”都匹配)
以我非常有限的经验,我理解,我可以尝试相交之类的东西,但是当标签太多时这是不切实际的。
解决方案
这个查询:
select goods_id
from tag_goods
group by goods_id
having count(*) = (select count(*) from tags)
返回id
具有来自 的所有标签的所有商品tags
。您可以使用它通过操作符
从表中返回行:goods
IN
select * from goods
where id in (
select goods_id
from tag_goods
group by goods_id
having count(*) = (select count(*) from tags)
)
推荐阅读
- rest - REST GET 的 HTTP 响应代码 - 未找到子资源(但未由标识符引用)
- nginx - 无法从外部访问 nginx
- javascript - 如何限制 contenteditable div 中的行数
- mysql - 我应该如何存储另一个表的行以便在前端有统计数据?
- node.js - 分布式计算,启动时在一台服务器上运行代码
- ios - 识别出faceId后如何导航到另一个页面?
- excel - 如何修复“类不支持自动化或不支持预期接口”
- php - Laravel Dusk - 无法连接到 localhost 端口 9515:连接被拒绝
- c - 请告知我不涉及哪种情况
- javascript - 如何在正确反应中添加列表项