我有一个多对多的关系
code1 code2
1 10 <-- Desired (1 appears more than once)
1 11 <-- Desired (1 appears more than once)
1 17 <-- Desired (1 appears more than once)
2 10
3 11 <-- Desired (3 appears more than once)
3 17 <-- Desired (3 appears more than once)
4 10
5 10
...我想编写一个单个 SQL 查询,其结果如下:
code1
1 <-- This result appears because 1 appears more than once above
3 <-- This result appears because 3 appears more than once above
(即,返回 code1
中任何数据与 11 和 17 相关联的所有行的单个 SQL 查询)...
我可以写什么SQL?可能吗?
最佳答案
您可以使用 GROUP BY 和 HAVING 来过滤掉这些。试试这个:
SELECT code1
FROM myTable
GROUP BY code1
HAVING COUNT(*) > 1;
这将提取所有多次出现的“code1”值,方法是对它们进行分组,并查看哪些组有多于一行。
编辑
如果你想在其他列上包含条件,你可以先编写一个只获取你想要的行的查询(如你在评论中所说,其中 code2 等于 11 或 17),如下所示:
SELECT code1, code2
FROM myTable
WHERE code2 = 11 OR code2 = 17;
然后,您可以对该查询应用上述过滤器。您的结果集中不需要 code2:
SELECT code1
FROM myTable
WHERE code2 = 11 OR code2 = 17
GROUP BY code1
HAVING COUNT(*) > 1;
我在 SQL Fiddle 中对此进行了测试它奏效了。
关于mysql - SQl 选择出现在一组或多组中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27450741/