我正在尝试删除96k记录.
此查询返回91k记录:
SELECT *
FROM xoops_bb_posts_text t
WHERE not exists (
select post_id
from xoops_bb_posts p
WHERE p.post_id = t.post_id
);
Run Code Online (Sandbox Code Playgroud)
当我试图删除那些记录时,我得到了语法错误,但我没有看到它.
DELETE FROM xoops_bb_posts_text t
WHERE not exists (
select post_id
from xoops_bb_posts p
WHERE p.post_id = t.post_id
);
Run Code Online (Sandbox Code Playgroud)
错误在哪里?
错误
SQL查询:文档
DELETE FROM xoops_bb_posts_text t
WHERE NOT EXISTS (
SELECT post_id
FROM xoops_bb_posts p
WHERE p.post_id = t.post_id
)
Run Code Online (Sandbox Code Playgroud)
MySQL说:文档
#1064 - 您的SQL语法有错误; 检查与您的MySQL服务器版本对应的手册,以便在'WHERE not exists'附近使用正确的语法(从第2行的xoops_bb_posts p WHERE p.post_id = t.post_中选择post_id)
Tim*_*Tim 10
如果在删除调用中对别名进行别名,则必须使用别名作为参数:
DELETE alias FROM tablerealname as ALIAS ...
所以在OP的原始问题中,他只需在DELETE之后添加别名:
DELETE t FROM xoops_bb_posts_text as t WHERE NOT EXISTS (
SELECT post_id
FROM xoops_bb_posts as p
WHERE p.post_id = t..post_id
)
Run Code Online (Sandbox Code Playgroud)
对我来说,通过使用delete带有a的语句outer join并查找不匹配的行,可以更轻松地解决此问题.像这样的东西:
delete t from xoops_bb_posts_text as t
left outer join xoops_bb_posts as p
on p.post_id = t.post_id
where p.post_id is null;
Run Code Online (Sandbox Code Playgroud)
或者只是更改您的查询:
DELETE t
FROM xoops_bb_posts_text t
WHERE not exists
(select post_id from xoops_bb_posts p WHERE p.post_id = t.post_id );
Run Code Online (Sandbox Code Playgroud)