首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用MySQL左连接删除行

使用MySQL左连接删除行
EN

Stack Overflow用户
提问于 2010-05-04 14:20:32
回答 6查看 156K关注 0票数 209

我有两个表,一个用于工作截止日期,另一个用于描述工作。每个作业都可以有一个状态,有些状态意味着作业的截止日期必须从另一个表中删除。

我可以使用LEFT JOIN轻松地SELECT符合我的标准的工作/截止日期

代码语言:javascript
复制
SELECT * FROM `deadline`
LEFT JOIN `job` ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'

(status属于job表,不属于deadline)

但是当我想从deadline中删除这些行时,MySQL抛出了一个错误。我的问题是:

代码语言:javascript
复制
DELETE FROM `deadline`
LEFT JOIN `job`
ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'

MySQL错误说明不了什么:

您的SQL语法中有一个错误;请查看与您的MySQL服务器版本对应的手册,了解要在第1行使用'LEFT JOIN job ON deadline.job_id = job.job_id WHERE status = 'szaml‘的正确语法

如何将我的SELECT转换为有效的DELETE查询?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-05-04 14:26:52

您只需指定要对哪些表应用DELETE即可。

仅删除deadline行:

代码语言:javascript
复制
DELETE `deadline` FROM `deadline` LEFT JOIN `job` ....

删除deadlinejob行:

代码语言:javascript
复制
DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` ....

仅删除job行:

代码语言:javascript
复制
DELETE `job` FROM `deadline` LEFT JOIN `job` ....
票数 391
EN

Stack Overflow用户

发布于 2013-05-16 20:05:01

如果您使用的是"table as",则指定要删除的表。

在示例中,我删除了table_2中不存在的所有table_1行。

代码语言:javascript
复制
DELETE t1 FROM `table_1` t1 LEFT JOIN `table_2` t2 ON t1.`id` = t2.`id` WHERE t2.`id` IS NULL
票数 43
EN

Stack Overflow用户

发布于 2010-05-04 14:24:41

代码语言:javascript
复制
DELETE FROM deadline where ID IN (
    SELECT d.ID FROM `deadline` d LEFT JOIN `job` ON deadline.job_id = job.job_id WHERE `status` =  'szamlazva' OR `status` = 'szamlazhato' OR `status` = 'fizetve' OR `status` = 'szallitva' OR `status` = 'storno');

我不确定这种子查询在MySQL中是否有效,但可以尝试一下。我假设您在deadline表中有一个ID列。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2763206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档