首页 > 解决方案 > SQL QUERY:仅当 values1 不同时才返回其他列中具有相同 value2 的 values1

问题描述

我想查询数据库以获取指向其他列中相同值的不同值。例如:

表格1:

Letter     :    Number
a ---------------1
b ---------------1
b ---------------2
a ---------------1
a ---------------3
a ---------------3
c ---------------5

预期输出:

a ---------------1
b ---------------1
a ---------------1

不幸的是,我不使用支持窗口函数的 RDBMS。

标签: mysqlsql

解决方案


MySQL 设置

CREATE TABLE table1 ( Letter CHAR(1), number INT );

INSERT INTO table1 ( Letter, number )
SELECT 'a', 1 UNION ALL
SELECT 'b', 1 UNION ALL
SELECT 'b', 2 UNION ALL
SELECT 'a', 1 UNION ALL
SELECT 'a', 3 UNION ALL
SELECT 'a', 3 UNION ALL
SELECT 'c', 5

查询

SELECT *
FROM   table1 t
WHERE  EXISTS (
  SELECT 1
  FROM   table1 x
  WHERE  x.number = t.number
  GROUP BY number
  HAVING COUNT( DISTINCT Letter ) > 1
)

输出

信 | 数字
:----- | -----:
一个 | 1
乙 | 1
一个 | 1

db<>在这里摆弄


COUNT您可以使用分析函数在单个表扫描中执行此操作:

甲骨文设置

CREATE TABLE table1 ( Letter, "NUMBER" ) AS
SELECT 'a', 1 FROM DUAL UNION ALL
SELECT 'b', 1 FROM DUAL UNION ALL
SELECT 'b', 2 FROM DUAL UNION ALL
SELECT 'a', 1 FROM DUAL UNION ALL
SELECT 'a', 3 FROM DUAL UNION ALL
SELECT 'a', 3 FROM DUAL UNION ALL
SELECT 'c', 5 FROM DUAL

查询

SELECT Letter, "NUMBER"
FROM   (
  SELECT t.*,
         COUNT( DISTINCT Letter ) OVER ( PARTITION BY "NUMBER" ) AS num_letters
  FROM   table1 t
)
WHERE  num_letters > 1

输出

信 | 数字
:----- | -----:
一个 | 1
一个 | 1
乙 | 1

db<>在这里摆弄


推荐阅读