MySQL查询删除A表中没有在B表上找到id的所有行?

时间:2017-01-04 15:27:32

标签: php mysql

在我的mySQL数据库中,在表audience下面有一个名为unique_hash的列,其中包含每个访问者的唯一标识符。

在表behaviour中,有一列unique_hashpage。与unique_hash表相反,audience可以有很多行。但是,unique_hash上的behaviour来自已将其保存到audience表中的访问者。

不幸的是,由于某些维护原因,我丢失了部分数据,结果是表unique_hashbehaviour的明显数量超过了unique hash audience这应该是平等的时间。

什么是mysql查询将删除behaviour表中unique_hash表上找不到audience的所有行?

1 个答案:

答案 0 :(得分:2)

您可以使用NOT IN,如下所示:

DELETE FROM behaviour 
WHERE NOT unique_hash IN (
    SELECT DISTINCT unique_hash FROM audience
)

第二种解决方案是使用NOT EXISTS

DELETE FROM behaviour
WHERE NOT EXISTS (
    SELECT * FROM audience 
    WHERE audience.unique_hash = behaviour.unique_hash
)