现有一张表存在如下A,B列:
列:
A B
值:
1 2
1 3
1 4
2 1
2 3
2 4
3 1
3 2
3 4
4....这是正常情况下会有这样的数据,现如果出现1 2,但是不存在2 1,请问能否通过一条SQL查询出该表中所有存在这种不正常关系的数据?
谢谢.

解决方案 »

  1.   

    我说的正常数据就是存在1 2,也存在2 1,
    不正常数据就是存在1 2,但不存在2 1.
    以列来说,在这个表中存在列A到列B的一条记录,但不存在列B到列A的这么一条反向记录,我就定义它是不正常的.
    现在我的问题就是希望通过一个SQL查询找到这类存在问题的数据,或者用其它的方式来解决也行.
      

  2.   

    现有一张表存在如下A,B列: 
    列: 
    A   B 
    值: 
    1   2 
    1   3 
    1   4 
    2   1 
    2   3 
    2   4 
    3   1 
    3   2 
    3   4 
    4.... 
    ////////////////////////////以上正常
    列: 
    A   B 
    值: 
    1   2 
    1   3 
    1   4 
    2   3 
    2   4 
    3   1
    3   4 
    4.... 
    /////////////////以上不正常,表现就是存在1 2,但不存在2 1,存在2 3,但不存在3 2.
      

  3.   


    select * from AB;
    A B
    - -
    1 2
    1 3
    1 4
    2 3
    2 4
    3 1
    3 4select *  from AB
    minus
    (
    select a.a,a.b from AB a,AB b where a.a=b.b and a.b=b.a
    )
    A B
    - --
    1 2
    1 4
    2 3
    2 4
    3 4
      

  4.   

    不能执行啊.报ORA-01789错误:
    查询块具有不正确的结果列数.实在没办法只能写程序来做了.
      

  5.   

    楼上的思路是对的,就是做法很多余。SELECT A,B FROM AB
    MINUS 
    SELECT B,A FROM AB
      

  6.   

    其实,上面的写法还是有点问题,比如说A是4的数据都没有了,就有问题。
    这个时候呢,就需要先UNION,然后MINUSSELECT   A,B   FROM   AB
    UNION 
    SELECT   B,A   FROM   AB可以得到应该出现的所有的纪录,
    除去现在有的,就是那些没有出现的记录了。
      

  7.   

    楼上的句子,改为select A,B  from AB
    minus
    (
    select a.a,a.b from AB a,AB b where a.a=b.b and a.b=b.a
    )就可以了。
    其实想法都是一样的。
      

  8.   

    1.不存在反向记录的记录
    SELECT       A,B       FROM       AB
    UNION  
    SELECT       B,A       FROM       AB
    MINUS
    SELECT       B,A       FROM       AB2.不存在的反向记录
    SELECT       B,A       FROM       AB
    MINUS
    SELECT       A,B       FROM       AB3.存在反向记录的记录
    SELECT       B,A       FROM       AB
    INTERSECT
    SELECT       A,B       FROM       AB
      

  9.   

    1。其实就是
    SELECT   A,B   FROM   AB
    MINUS  
    SELECT   B,A   FROM   AB