有两个表:table1 table2
table1                              table2
sh  kmh  bz   br   rq               sh   kmh   bz   br   rq
029 25   01   10   2002/10/10       029   26   01   10   2002/10/10
029 25   02   11   2002/10/10       029   26   02   11   2002/10/10
055 25   01   29   2002/10/09       055   26   01   11   2002/10/09
                                    055   26   14   11   2002/10/09
056 25   14   11   2002/10/10       056   26   14   11   2002/10/09用SQL来找出经(select * from table1,table2 
where table1.sh=table2.sh,table1.bz=table2.bz,table1.rq=table2.rq) 
筛选后两个表中剩余的记录。

解决方案 »

  1.   

    select * from table1
    WHERE NOT EXISTS (
    SELECT * FROM table2 
    where table1.sh=table2.sh
    AND table1.bz=table2.bz 
    AND table1.rq=table2.rq
    ) 
    UNION ALL
    select * from table2
    WHERE NOT EXISTS (
    SELECT * FROM table1 
    where table1.sh=table2.sh
    AND table1.bz=table2.bz 
    AND table1.rq=table2.rq
    ) 
      

  2.   

    请问 UNION all 是什么意思?
      

  3.   

    Lock Table table1,table2 WRITE;
    CREATE TEMPORARY TABLE tmp 
      SELECT table1.* FROM table1,table2
      WHERE (table1.sh=table2.sh) AND (table1.bz=table2.bz)
      AND (table1.rq=table2.rq);
    DELETE FROM table1;
    DELETE FROM table2;
    INSERT INTO table1 SELECT * FROM tmp;
    INSERT INTO table2 SELECT * FROM tmp;
    DROP TABLE tmp;
    UNLOCK TABLE;
      

  4.   

    这样table1,table2中的不都是我的SQL语句中筛选出来的记录吗?
      

  5.   

    UNION
    将两个或更多查询的结果组合为单个结果集,该结果集包含联合查询中的所有查询的全部行,并去掉重复的行.UNION ALL
    将两个或更多查询的结果组合为单个结果集,该结果集包含联合查询中的所有查询的全部行,不去掉重复的行.