MySQL替代查询:NOT EXISTS / NOT IN

时间:2013-01-15 19:47:53

标签: mysql mysqldump

我在使用数据库中的NOT IN / NOT EXISTS执行DELETE或UPDATE查询时遇到问题。我有2个表USERSREMARK

提示:Users表记录= 9880 AND Remark表记录= 38943

我想删除REMARK表中profile_id表中不存在users的所有数据。

为了执行我使用此查询的操作:

UPDATE remark 
SET status = '0'
WHERE profile_id  NOT IN (SELECT * FROM users); 
Or
DELETE from remark 
WHERE profile_id NOT EXISTS (SELECT * FROM users); 
Or
DELETE FROM remark
WHERE NOT EXISTS (
     select * from users
     where users.profile_id = remark. profile_id);

结果=#2013 - 查询期间与MySQL服务器的连接丢失

请帮帮我。

2 个答案:

答案 0 :(得分:1)

你很亲密;

UPDATE remark SET status = '0' WHERE profile_id NOT IN 
    (SELECT * FROM users); 

应该很可能是;

UPDATE remark SET status = '0' WHERE profile_id NOT IN
    (SELECT profile_id FROM users); 

由于*会从用户中选择所有字段,因此您无法将其与profile_id进行比较,只需选择要比较的字段即可。

当然,您可以使用相同的WHERE子句删除

DELETE FROM remark WHERE profile_id NOT IN
    (SELECT profile_id FROM users); 

答案 1 :(得分:0)

DELETE FROM REMARK
WHERE NOT EXISTS (
    SELECT *
    FROM USERS
    WHERE profile_id=REMARK.profile_id
)

请注意,以下内容不起作用(或任何其他近距离变化):

DELETE FROM REMARK r
WHERE NOT EXISTS (
    SELECT *
    FROM USERS
    WHERE profile_id=r.profile_id
)

由于参考。致谢:http://www.electrictoolbox.com/mysql-delete-records-in-one-table-not-in-another/