Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查找两个表,其中一个表具有冗余值_Mysql_Sql - Fatal编程技术网

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