mysql多行查询
不确定我的标题是否正确,但让我描述一下我的工作内容 所以我有一个视图,它由class\u id、entity\u id和item\u id组成,如下所示: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
'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: