SQL不匹配的删除

时间:2016-06-07 02:00:18

标签: php sql database

假设我有两个表,recordsrecordsclean。现在这两个表都有15列信息。我想仅使用一个唯一的列来比较它们,并确定不匹配的结果。一旦我找到那些无法比拟的结果,我想从一个表中删除它们。

SELECT  email
FROM    records
WHERE   id NOT IN      
(        
       SELECT  email    
       FROM    recordsclean      
);

现在我在这个例子中使用email,但我很可能会使用像注册号码这样更独特的东西。我只是用电子邮件地址测试它。因此,这会生成records中找不到recordsclean中找不到的电子邮件列表。表records将保留我计划无限期保留的历史数据,因为recordsclean将成为一组新信息。我想将records的完整版与新recordsclean进行比较,然后识别/删除与recordsclean匹配的任何内容。

  1. 数据已添加到records
  2. 新数据已添加到recordsclean
  3. SQL命令运行并识别两者中的匹配记录。
  4. SQL命令仅从recordsclean运行并删除所有匹配的记录。

1 个答案:

答案 0 :(得分:0)

如果您想比较多个列并找到所有不匹配的行,请使用LEFT JOIN模式而不是NOT IN

SELECT rc.*
FROM recordsclean AS rc
LEFT JOIN records AS r
    ON rc.col1 = r.col1 AND rc.col2 = r.col2 AND rc.col3 = r.col3 ...
WHERE r.id IS NULL

要删除它们,只需将其更改为DELETE查询。

DELETE rc
FROM recordsclean AS rc
LEFT JOIN records AS r
    ON rc.col1 = r.col1 AND rc.col2 = r.col2 AND rc.col3 = r.col3 ...
WHERE r.id IS NULL