mysql - SQl 选择出现在一组或多组中的数据

标签 mysql sql sql-server

我有一个多对多的关系

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/

相关文章:

javascript - 如何使用 Laravel 在图表中显示当月的所有天数

sql - DBCC CHECKDB 用于检查 SQL Server 数据库中的错误

mysql - 在处理庞大的用户群时让迁移变得轻松

c# - SQL 查询在代码中超时,但在管理工作室中需要几秒钟

mysql - 组合 EXISTS 和 LEFT JOIN

MySQL SELECT 最近几天?

PHP setTimeZone 时区转换问题 - 由于 BST (GMT+1) 而造成的特性

mysql - 如何获取mysql中日期范围内一周中特定天数的计数?

SQL Server : SELECT from sys. 表和 sys.views

php - CodeIgniter 插入两行而不是一行