我有一个与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/

10-11 12:43
查看更多