Mysql 如何删除与第二个表中的行不匹配的表行

Mysql 如何删除与第二个表中的行不匹配的表行,mysql,sql-delete,Mysql,Sql Delete,我在一个数据库中有两个表。 在这两个表中,有几行内容相同 table visitor -------------------------- id | mytoken1 | -------------------------- 1 | token_abcd | 2 | token_efgh | 3 | token_ijkl | 4 | token_mnop | -----------------------

我在一个数据库中有两个表。 在这两个表中,有几行内容相同

table visitor
--------------------------
id      |   mytoken1    |
--------------------------
1       |   token_abcd  |
2       |   token_efgh  |
3       |   token_ijkl  |
4       |   token_mnop  |
--------------------------

table favorites
--------------------------
id      |   mytoken2    |
--------------------------
1       |   token_abcd  |
2       |   token_efgh  |
3       |   token_ijkl  |
4       |   token_mnop  |
5       |   token_aaaa  |
6       |   token_bbbb  |
7       |   token_cccc  |
8       |   token_dddd  |
--------------------------
如何删除不在
mytoken1
列中的
mytoken2
列? 因此,在上面的示例中,我想删除4行数据,包括:

token_aaaa
token_bbbb
token_cccc
token_dddd

我一直试图找到解决方法,直到我头晕,但还没有解决,我希望有人能在这里帮助我。

你可以使用不在

DELETE FROM favorites
WHERE token2 NOT IN (SELECT token1 FROM visitor)

您可以使用而不是在

DELETE FROM favorites
WHERE token2 NOT IN (SELECT token1 FROM visitor)

您可以使用
不存在

DELETE FROM favorites
            WHERE NOT EXISTS (SELECT *
                                     FROM visitor
                                     WHERE visitor.mytoken1 = favorites.mytoken2);

您可以使用
不存在

DELETE FROM favorites
            WHERE NOT EXISTS (SELECT *
                                     FROM visitor
                                     WHERE visitor.mytoken1 = favorites.mytoken2);

JOIN也可以在此处使用:

DELETE favorites.*
FROM favorites
LEFT JOIN visitor ON visitor.mytoken1 = favorites.mytoken2
WHERE visitor.id IS NULL;

您可以在此处加入,也可以在此处使用:

DELETE favorites.*
FROM favorites
LEFT JOIN visitor ON visitor.mytoken1 = favorites.mytoken2
WHERE visitor.id IS NULL;

这里您可以

它使用了大量连接,我的服务器无法执行脚本,因为列中有数千个数据。它使用了大量连接,我的服务器无法执行脚本,因为列中有数千个数据。创建新表通常更快,只保留要保留的行,然后替换旧表创建新表通常更快,只保留要保留的行,然后替换旧表