mysql多行查询

时间:2017-10-12 21:43:19

标签: mysql sql database

不确定我的标题是否正确,但让我描述一下我正在使用的内容。

所以我有一个由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。

我一直在寻找我的双眼交叉。群体中的任何想法都是什么?

2 个答案:

答案 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;
相关问题