【发布时间】:2020-05-20 16:48:45
【问题描述】:
我有桌子:
标签
id:整数
名称:文本
商品
id:整数
名称:文本
TAGS_GOODS
tag_id:整数
goods_id:整数
唯一(tag_id,goods_id)
所以我要问的是如何找到分配了所有标签的商品的 ID 和名称。对不起初学者的问题。我将不胜感激;)
【问题讨论】:
-
我删除了不一致的数据库标签。仅使用您真正使用的数据库进行标记。
我有桌子:
标签
id:整数
名称:文本
商品
id:整数
名称:文本
TAGS_GOODS
tag_id:整数
goods_id:整数
唯一(tag_id,goods_id)
所以我要问的是如何找到分配了所有标签的商品的 ID 和名称。对不起初学者的问题。我将不胜感激;)
【问题讨论】:
这是一种方法:
SELECT g.id, g.name
FROM GOODS g
INNER JOIN TAGS_GOODS tg ON tg.goods_id = g.id
GROUP BY g.id, g.name
HAVING COUNT(*) = (SELECT COUNT(*) FROM TAGS);
这里的逻辑是按每个商品聚合,然后断言该商品的记录数与可用标签的总数匹配。此答案假定每个商品和标签在其自己的表中都是唯一的,并且联结表 TAGS_GOODS 也不会有重复的关系。
【讨论】:
使用内连接
SELECT goods.id, goods.name FROM goods INNER JOIN tags_goods ON goods.id=tags_goods INNER JOIN tags ON tags_goods.id=tags_id;
【讨论】: