我有一个与newby sql相关的问题。
假设我有这个简单的表格:
A B
------ ------
a b
a c
b a
m n
m o
n m
我想查询仅具有“对应项”的记录,即,我只想在表中有
a b
的情况下获取b a
,但我想跳过“反向链接”(此处为b a
)。总结一下,我想得到以下结果
A B
------ ------
a b
m n
此sql查询不起作用,因为在处理
b a
的情况下,已从我的结果集中删除了a b
。SELECT DISTINCT x1.A, x1.B
FROM TEST x1, TEST x2
WHERE x1.A = x2.B AND x1.B = x2.A -- all records /w counterparts only
AND x1.A NOT IN (SELECT B from TEST where B = x1.A) -- skip the "back links"
WHERE子句的第二部分无法正常工作。
你有什么提示吗?任何帮助,将不胜感激。
问候
彼得
p.s.我正在使用derby db。
最佳答案
您可以将最后一行更改为:
AND x1.A < x1.B
这假设您的列永远都不是自引用的(例如:a,a),或者您不希望出现循环引用。如果这样做,则:
AND x1.A <= x1.B
编辑:
您最好也使用显式联接:
SELECT DISTINCT
x1.A
, x1.B
FROM
TEST x1
JOIN
TEST x2
ON x1.A = x2.B
AND x1.B = x2.A -- all records /w counterparts only
WHERE x1.A < x1.B --Skip backreference
关于sql - sql在同一选项卡中选择查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13496368/