sql - 查找在不同列上包含相同值的行
问题描述
用于查找哪些行在 2 行的两个不同列上包含相同值的表。这是 2k+ 行中的一个小样本行。
id left right
1 3 4
2 4 1
3 1 9
4 2 6
5 2 5
6 9 8
7 0 7
在上述情况下,我需要获得第 1,2,3,6 行,因为它在两行的两个不同列上包含 4,即 (id=1&2),1 在两行两列不同的列上 (id=1&3) 和 9在两个不同列的两行上(id=3&6)
我的想法:
我确实想过很多事情,例如左右列的交叉连接、分组和计数等。
解决方案
你可以这样做EXISTS
:
SELECT t1.*
FROM tablename t1
WHERE EXISTS (
SELECT 1 FROM tablename t2
WHERE t1.id <> t2.id AND (t2.left = t1.right OR t1.left = t2.right)
)
请参阅演示。
结果:
ID | 剩下 | 正确的 |
---|---|---|
1 | 3 | 4 |
2 | 4 | 1 |
3 | 1 | 9 |
6 | 9 | 8 |
推荐阅读
- azure-cosmosdb - 带有 cosmos db 的 Asp.net 核心 api 中的 Json 补丁
- javascript - 制作状态机的承诺链?
- sql - 使用 sp_rename 更改列名时出错。(创建双冒号)
- javascript - 可以设置 Polymer JS 输入值,但不会在 UI 中呈现
- arrays - 在具有多个键的字典数组中搜索
- xml - Xpath 根据多个节点值过滤 xml
- youtube-api - 直播时如何让 youtube 广播自动启动?
- java - LIBGDX 平滑像素艺术渲染(这可能吗?)
- flutter - Dart Intl DateFormat.parse -1 年的差异,错误?
- acumatica - Can I dynamically set a PXDataFieldAssign parameter of a PXDataFieldParam object?