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

我可以很容易地选择工作/截止日期,符合我的标准与左连接:

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'

(状态属于作业表而不是截止日期)

但是当我想从截止日期删除这些行时,MySQL抛出一个错误。我的问题是:

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服务器版本对应的手册,以了解在'LEFT JOIN job ON deadline '附近使用的正确语法。Job_id = job。job_id WHERE status = 'szaml'在第一行

我怎样才能把我的SELECT变成一个工作的DELETE查询?


当前回答

您只需要指定在哪些表上应用DELETE。

只删除截止日期行:

DELETE `deadline` FROM `deadline` LEFT JOIN `job` ....

删除截止日期行和工作行:

DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` ....

只删除作业行:

DELETE `job` FROM `deadline` LEFT JOIN `job` ....

其他回答

这个脚本很适合我:

DELETE t
FROM table t
INNER JOIN join_table jt ON t.fk_column = jt.id
WHERE jt.comdition_column…;
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中是否有效,但请尝试一下。我假设在截止日期表中有一个ID列。

试试这个:

DELETE `deadline`
FROM `deadline`
INNER JOIN `job` ON `deadline`.`job_id` = `job`.`id`
WHERE `job`.`id` = 123

您只需要指定在哪些表上应用DELETE。

只删除截止日期行:

DELETE `deadline` FROM `deadline` LEFT JOIN `job` ....

删除截止日期行和工作行:

DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` ....

只删除作业行:

DELETE `job` FROM `deadline` LEFT JOIN `job` ....

如果你使用“table as”,那么指定它来删除。

在这个例子中,我删除了table_1中不存在的所有行。

DELETE t1 FROM `table_1` t1 LEFT JOIN `table_2` t2 ON t1.`id` = t2.`id` WHERE t2.`id` IS NULL