MySql从另一个表中减去一个表

时间:2011-04-21 00:39:58

标签: mysql

我有两个表:A包含所有数据,表B是从A中随机选择其数据的%25创建的。所以A和B有完全相同的列。此外,没有独特的专栏。

我想要做的是从A中减去B.任何想法?

5 个答案:

答案 0 :(得分:10)

要查看A中的所有行,B中的行除外:

SELECT * FROM A
WHERE (field1, field2, ..., fieldN) NOT IN
( SELECT *
  FROM B
) ;

要从表A中实际删除B中的行:

DELETE FROM A
WHERE (field1, field2, ..., fieldN) IN
( SELECT *
  FROM B
) ;

答案 1 :(得分:1)

鉴于您要比较多个字段,您需要使用exists或join。因为你想要删除它更简单易用,只需使用存在。

        delete from
        Tablea
        Where
         Exists(
              Select 1 
               from tableb
              where tablea.fielda = tableb.fielda 
                    And tablea.fieldb = Tableb.fieldb
                   And...)

答案 2 :(得分:1)

我对你有一个非常相似的要求,除了对我来说,B只是A的一个子集。 如果你还在寻找答案:

SELECT * FROM A WHERE NOT EXIST 
 (SELECT * FROM B WHERE A.field1 = B.field1 AND A.field2 = B.field2 etc)

您需要指定与在A和B上执行内部联接相同的条件。

答案 3 :(得分:0)

您需要在原始表上创建一个唯一键(它可以只是一个序号),您可以选择匹配或不匹配的记录(25%或反向)

答案 4 :(得分:0)

我强烈建议使用自动增量创建ID列,但是如果你不能这样做:

从WHERE中删除a.c1 =(SELECT c1 FROM b)和a.c2 =(SELECT c2 FROM b)AND a.c3 =(SELECT c3 FROM b)

抱歉,刚刚意识到它只适用于一排...

那么,我唯一得到的就是制作一个ID栏,对不起......