【发布时间】:2016-01-27 05:37:42
【问题描述】:
我有一个表,我想选择列中出现的具有完全相同的一组值的所有行,并将它们作为特定列的一对返回。
例如,假设我有一个名为 Table 的表:
C1 C2
1 1
1 2
1 3
2 1
3 1
3 2
3 3
4 1
4 2
当我运行查询时,它应该返回行:
1 3
因为这些是 C1 中的两个值,它们在 C2 列 (1,2,3) 中具有相同的一组值。
我在下面有一个不正确的查询,它返回在 C2 中至少有一个匹配值的所有行,我不知道如何更正它。
SELECT DISTINCT T1.C1, T2.C1
FROM Table T1, Table T2
WHERE T1.C1 != T2.C1
AND T1.C2 = T2.C2
AND T1.C1 < T2.C1
GROUP BY s1.suppId, s2.suppId;
任何帮助将不胜感激,谢谢。
【问题讨论】:
-
如果将 5,1 和 5, 2 添加到表中,您希望看到什么?两行输出?
-
@michaelBroughton 这是正确的。这将产生另一行,第一列输出 4 列,第二列输出 5 列。
-
如果你有三个 c1 和匹配的 C2 集怎么办?您希望动态显示三列?
-
cmets 的高方差表明,问题的表述不如唯一答案所需的清晰。这是我在不那么抽象的层面上的替代表述。该表包含两列
person_id和hobby_id(解释- 人A 有一个爱好H)。问题是找到所有具有相同爱好的人。一对只显示一次,因此如果 A 和 B 有相同的爱好,则只显示 A,B,而不显示 B,A .如果 A、B 和 C 有相同的爱好,则显示三对:A、B; A、C 和 B、C。这是我在下面回答的。