不确定我的标题是否正确,但让我描述一下我正在使用的内容。
所以我有一个由class_id,entity_id和item_id组成的视图。像这样:
docker run -it -p 127.0.0.1:8080:8080 nodeapi
所以你会注意到class_id = 21781,有三个实体/项对:'4243','15787','4249','15793'和'4255','15823'。我想找到所有那些具有相同实体/项目对的类别,但不是任何没有所有三个相同实体/项目对的类别。换句话说,如果数据集是关于的,则所需的查询将返回class_ids 21782,21783和21784,但不 21785。
我一直在寻找我的双眼交叉。群体中的任何想法都是什么?
答案 0 :(得分:1)
试试这个:
PS,它从你的代码看起来像你的ID是VARCHAR?不确定这是否只是出现在这里,但我已经用它了。如果它们是VARCHAR,你应该看看它们是INTs
SET @classid = '21781';
SELECT c.class_id
FROM Class c
LEFT JOIN (
SELECT *
FROM Class
WHERE class_id = @classid
) a
ON a.entity_id = c.entity_id AND a.item_id = c.item_id
GROUP BY c.class_id
HAVING COUNT(a.class_id) = (SELECT COUNT(*) FROM Class WHERE class_id = @classid) AND class_id <> @classid
答案 1 :(得分:0)
这是一种方法:
select c.class_id
from class c join
class c2
on c2.entity_id = c.entity_id and
c2.item_id = c.item_id and
c2.class_id = 21781 join
(select count(*) as cnt
from class
where class_id = 21781
) x
group by c.class_id, x.cnt
having count(*) = x.cnt;