Mysql 查找两个表,其中一个表具有冗余值
我想查找Mysql 查找两个表,其中一个表具有冗余值,mysql,sql,Mysql,Sql,我想查找作业列表存在但用户列表不存在的记录 例如,某些用户可能由于某种原因而被删除 但是他们的记录仍然保留在数据库中,所以我想找到他们并删除 在这种情况下,返回的结果应该是002和003 user_list +---------------------+ + user_id + name + +---------------------+ + 001 + Anna + +---------------------+ + 004 + David + +-
作业列表
存在但用户列表
不存在的记录
例如,某些用户可能由于某种原因而被删除
但是他们的记录仍然保留在数据库中,所以我想找到他们并删除
在这种情况下,返回的结果应该是002和003
user_list
+---------------------+
+ user_id + name +
+---------------------+
+ 001 + Anna +
+---------------------+
+ 004 + David +
+----------------------
...
job_list
+---------------------+
+ user_id + job +
+---------------------+
+ 001 + Norse +
+---------------------+
+ 002 + Doctor +
+---------------------+
+ 003 + Sales +
+----------------------
+ 004 + Driver +
+----------------------
...
我尝试了上面的SQL命令,但不起作用,请帮助
SELECT * FROM `user_list` ul, `job_list` jl WHERE jl.user_id NOT LIKE ul.user_id;
应该做这项工作试试这个
SELECT * FROM job_list AS jl
LEFT JOIN user_list AS ul ON ul.user_id = jl.user_id
WHERE ul.user_id IS NULL
SELECT user_id FROM job_list MINUS SELECT user_id FROM user_list;
如果你不在乎,但知道要删除哪些记录,你只要做些什么来删除它们,像这样的事情应该可以做到:(警告:子查询的效率非常低) 如果在删除记录之前不想知道这些记录,则应加入表:
delete from job_list where user_id not in ( select user_id from user_list)
没问题@nasaorc。使用
notexists
非常有效,因为您不必JOIN
整个表,merley会检查要丢弃的记录。但是,有时在用户id不在的位置使用(选择…
)会更有效。取决于数据库和索引等的大小。更重要的是DBMS和mySQL以其糟糕的子查询实现而闻名:-)
delete from job_list where user_id not in ( select user_id from user_list)
SELECT * FROM job_list
LEFT JOIN user_list
ON user_list .user_id = job_list.user_id
WHERE user_list.user_id = NULL