我有两个表:A包含所有数据,表B是从A中随机选择其数据的%25创建的。所以A和B有完全相同的列。此外,没有独特的专栏。
我想要做的是从A中减去B.任何想法?
答案 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栏,对不起......