删除在其他表中没有引用的行;

Vor*_*Vor 1 mysql sql reference

我想删除数据库中的所有行,在另一个表中没有引用:

还行吧:

mysql> DELETE FROM auth_user WHERE username = 'Sample41';
Query OK, 1 row affected (0.02 sec)
Run Code Online (Sandbox Code Playgroud)

这不行:

mysql> DELETE FROM auth_user WHERE username = 'Sample98';
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`mydatabase`.`school_subjects`, CONSTRAINT `user_id_refs_id_9e8f6fd7` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`))
Run Code Online (Sandbox Code Playgroud)

所以我的目标是获得一个查询,删除所有用户(他们将以'Sample'开头),这些用户在其他表中没有引用(实际上只有一个表'school_subjects')

谢谢.,

更新:

mysql> describe school_subjects;
+------------------+--------------+------+-----+---------+----------------+
| Field            | Type         | Null | Key | Default | Extra          |
+------------------+--------------+------+-----+---------+----------------+
| id               | int(11)      | NO   | PRI | NULL    | auto_increment |
| name             | varchar(500) | NO   |     | NULL    |                |
| user_id          | int(11)      | NO   | MUL | NULL    |                |
| created_by       | varchar(64)  | NO   |     | NULL    |                |
| created_time     | datetime     | NO   |     | NULL    |                |
| num_of_followers | int(11)      | NO   |     | NULL    |                |
+------------------+--------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

mysql> describe auth_user;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| username     | varchar(30)  | NO   | UNI | NULL    |                |
| first_name   | varchar(30)  | NO   |     | NULL    |                |
| last_name    | varchar(30)  | NO   |     | NULL    |                |
| email        | varchar(75)  | NO   |     | NULL    |                |
| password     | varchar(128) | NO   |     | NULL    |                |
| is_staff     | tinyint(1)   | NO   |     | NULL    |                |
| is_active    | tinyint(1)   | NO   |     | NULL    |                |
| is_superuser | tinyint(1)   | NO   |     | NULL    |                |
| last_login   | datetime     | NO   |     | NULL    |                |
| date_joined  | datetime     | NO   |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+
11 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

Uli*_*ses 5

所以我的目标是获得一个查询,删除所有用户(他们将以'Sample'开头),这些用户在其他表中没有引用(实际上只有一个表'school_subjects')

你有一个自引用表.如果要删除必须包含的所有记录school_subjectsauth_user.尝试:

DELETE FROM auth_user WHERE username not in (SELECT id FROM auth_user) 
and  username not in (SELECT user_id FROM school_subjects);
Run Code Online (Sandbox Code Playgroud)

更新:如果您没有自引用约束并且只关心'school_subjects',尝试以下查询,请注意它将删除所有与约束不冲突的记录:

DELETE FROM auth_user WHERE username not in (SELECT user_id FROM school_subjects);
Run Code Online (Sandbox Code Playgroud)

如果您只需删除一些,则需要:

DELETE FROM auth_user 
WHERE username in ('SomeRecordToBeDeleted', 'one more') AND
username not in (SELECT user_id FROM school_subjects);
Run Code Online (Sandbox Code Playgroud)