找到两个表,其中一个表具有冗余值

时间:2014-01-30 14:28:57

标签: mysql sql

user_list
+---------------------+
+  user_id  +  name   +
+---------------------+
+ 001       + Anna    +
+---------------------+
+ 004       + David   +
+----------------------
...


job_list
+---------------------+
+  user_id  +  job    +
+---------------------+
+ 001       + Norse   +
+---------------------+
+ 002       + Doctor  +
+---------------------+
+ 003       + Sales   +
+----------------------
+ 004       + Driver  +
+----------------------
...

我想找到job_list存在但user_list不存在

的记录

例如,某些用户可能因某种原因被删除

但他们的记录仍留在数据库中,所以我想找到它们并删除

在这种情况下,返回结果应为002和003

SELECT * FROM `user_list` ul, `job_list` jl WHERE jl.user_id NOT LIKE ul.user_id;

我尝试了上面的SQL命令但没有用,请帮忙

4 个答案:

答案 0 :(得分:2)

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

应该做的工作

答案 1 :(得分:1)

试试这个

SELECT * 
FROM `job_list` jl 
WHERE NOT EXISTS (SELECT 1 FROM user_list ul WHERE ul.user_id=jl.user_Id)

答案 2 :(得分:0)

如果你不在乎abaut知道什么记录删除,你只是想删除它们这样的东西应该做的伎俩:(警告:子查询是极其低效的)

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

答案 3 :(得分:-2)

SELECT user_id FROM job_list MINUS SELECT user_id FROM user_list;