mysql - 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。
解决方案
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<>在这里摆弄
推荐阅读
- android - 如何从 Activity 到 Fragment?
- haskell - 对 Xmonad 工作区使用 unicode 字符
- kubernetes - 对于“超过 63 个字符”的指标,通过 custom-metrics-stackdriver-adapter 的水平 Pod 自动缩放失败
- r - 替换矩阵(R)中的值的有效方法
- r - R如何在lapply工作中使用动态范围
- python - 查找嵌套列表程序的第二大数
- java - 合并字母以形成字符串并与现有字符串进行比较?我对java很陌生,我该如何编写逻辑?
- javascript - MongoDB 使用 reduce "$$this" 变量作为对象键
- java - Android Java Textview 设置文本文件路径
- javascript - 列出悬停时更改类的项目