假设我有两个表,records
和recordsclean
。现在这两个表都有15列信息。我想仅使用一个唯一的列来比较它们,并确定不匹配的结果。一旦我找到那些无法比拟的结果,我想从一个表中删除它们。
SELECT email
FROM records
WHERE id NOT IN
(
SELECT email
FROM recordsclean
);
现在我在这个例子中使用email
,但我很可能会使用像注册号码这样更独特的东西。我只是用电子邮件地址测试它。因此,这会生成records
中找不到recordsclean
中找不到的电子邮件列表。表records
将保留我计划无限期保留的历史数据,因为recordsclean
将成为一组新信息。我想将records
的完整版与新recordsclean
进行比较,然后识别/删除与recordsclean
匹配的任何内容。
records
。recordsclean
。recordsclean
运行并删除所有匹配的记录。答案 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