Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql多行查询_Mysql_Sql_Database - Fatal编程技术网

mysql多行查询

mysql多行查询,mysql,sql,database,Mysql,Sql,Database,不确定我的标题是否正确,但让我描述一下我的工作内容 所以我有一个视图,它由class\u id、entity\u id和item\u id组成,如下所示: '21781','4243','15787' '21781','4249','15793' '21781','4255','15823' '21782','4243','15787' '21782','4249','15793' '21782','4255','15823' '21782','4285','15526' '21782','42

不确定我的标题是否正确,但让我描述一下我的工作内容

所以我有一个视图,它由class\u id、entity\u id和item\u id组成,如下所示:

'21781','4243','15787'
'21781','4249','15793'
'21781','4255','15823'
'21782','4243','15787'
'21782','4249','15793'
'21782','4255','15823'
'21782','4285','15526'
'21782','4288','17588'
'21783','4243','15787'
'21783','4249','15793'
'21783','4255','15823'
'21783','4285','15527'
'21783','4288','17588'
'21784','4243','15787'
'21784','4249','15793'
'21784','4255','15823'
'21784','4285','15527'
'21784','4288','15542'
'21785','4243','15877'
'21785','4249','15793'
'21785','4255','15823'
'21785','4285','15527'
'21785','4288','17588'
所以您会注意到类_id=21781有三个实体/项对:“4243”、“15787”、“4249”、“15793”和“4255”、“15823”。我想找到所有拥有这些相同实体/项目对的类,但没有任何不拥有所有三个相同实体/项目对的类。换句话说,如果数据集是关于的,那么所需的查询将返回类_id 2178221783和21784,而不是21785

我看了这么多,眼睛都交叉了。大家有什么想法吗?

试试这个:

PS,从你的代码看你的ID是VARCHAR?我不确定这是否只是为了在这里展示,但我已经同意了。如果它们是VARCHAR,您应该考虑使它们成为int

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
这里有一种方法:

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;

因此,您正在查找与21781具有相同对的所有类id。21781是一个参数还是这个ID有什么意义?没有什么意义,只是我找到的第一个具有我所述属性的参数。很可能是21780或21001或其他不同的数字。我只需要找到其他具有相同属性的类实体/项pairSee认为是这样,但最好检查一下!注释的可能副本,b,c,…,而不是a。。。。在c,d,e,f中有a,b,…。可以在having子句中使用c.class_id@classid代替和class_id@classid-可能更可读。我想它最后出现在having子句中,因为我在最后一分钟意识到它不应该显示原始的class_id,所以这是一种事后思考!谢谢我了解到MySQL允许您使用GROUP BY做SQL Server不允许的事情!哦,天哪,不,要小心MySQL的非标准语法。它受可以更改的服务器设置控制,在最新版本中,默认设置已更改,可能会造成严重破坏,请使用标准SQL语法。通过查看仅查找\u完整\u组\u: