sql选择同一个表中的查询

标签 sql select

我有一个 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 子句的第二部分无法正常工作。

你有什么提示吗?对此的任何帮助将不胜感激。

问候
彼得

附言我正在使用 Derby 数据库。

最佳答案

您可以将最后一行更改为:

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选择同一个表中的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13496368/

相关文章:

mysql 按相同值的 2 列分组

sql - Oracle查询以秒为单位的时差

sql - Oracle SQL - 将主键添加到表

javascript - 如何从表单字段获取值

php - 计算表 2 中请求表 1 的用户数

mysql - 在 mysql 5.0 中将文件与 REGEXP 进行比较

php - MySQL SQL语法错误;查看与您的 MySQL 服务器版本相对应的手册,了解要使用的正确语法

sql - 区分联合表中的行

c# - Entity Framework 4.0 批量操作的性能

设置了整数的特定位的 mySQL SELECT 行