求表T中,概不符合条件A、B、C、D的记录集合,即符合条件A、B、C、D的集合的补集。
已知道
SELECT * FROM T WHERE 主键 NOT IN (SELECT 主键 FROM T WHERE A OR B OR C OR D)是可以达到目的的,但是这个SQL是建立在知道该表主键的前提下的。
能不能在不知道主键的情况下,只凭表名和条件,查出其补集呢?
谢谢大家!

解决方案 »

  1.   


    SELECT * FROM T WHERE not exists (SELECT * FROM T WHERE A OR B OR C OR D)这样行不行呢?
      

  2.   


    SELECT COL1,COL2,... FROM T WHERE
    NOT EXISTS (SELECT 1 FROM A WHERE COL1=T.COL1 AND COL2=T.COL2 AND ...) 
    AND NOT EXISTS (SELECT 1 FROM B WHERE COL1=T.COL1 AND COL2=T.COL2 AND ...) 
    AND NOT EXISTS (SELECT 1 FROM C WHERE COL1=T.COL1 AND COL2=T.COL2 AND ...)
    AND NOT EXISTS (SELECT 1 FROM D WHERE COL1=T.COL1 AND COL2=T.COL2 AND ...)
      

  3.   

    就是not exists
    SELECT * FROM T WHERE NOT EXISTS (SELECT 1 FROM T WHERE A OR B OR C OR D)
      

  4.   

    最好给出完整的表结构,测试数据,计算方法和正确结果.发帖注意事项
    http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
      

  5.   

    SELECT *  FROM T WHERE not (A OR B OR C OR D)