首页 > 解决方案 > 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 和名称(注意:我需要引用查询中的所有标签,而不是一一引用)。

(意思是,例如我只有四个标签:“黄色”、“圆形”、“可食用”、“有机”,只有商品“奶酪”和“甜瓜”都匹配)

以我非常有限的经验,我理解,我可以尝试相交之类的东西,但是当标签太多时这是不切实际的。

标签: sqldatabasesqlite

解决方案


这个查询:

select goods_id
from tag_goods
group by goods_id
having count(*) = (select count(*) from tags)

返回id具有来自 的所有标签的所有商品tags。您可以使用它通过操作符
从表中返回行:goodsIN

select * from goods
where id in (
  select goods_id
  from tag_goods
  group by goods_id
  having count(*) = (select count(*) from tags)
)

推荐阅读