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

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

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查询?


当前回答

如果你使用“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

其他回答

试试这个:

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

如果你使用“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

MySQL允许您在DELETE语句中使用INNER JOIN子句从一个表中删除行,并在另一个表中删除匹配的行。

例如,要从满足指定条件的T1和T2表中删除行,可以使用以下语句:

DELETE T1, T2
FROM T1
INNER JOIN T2 ON T1.key = T2.key
WHERE condition;

注意,您将表名T1和T2放在DELETE和FROM关键字之间。如果省略T1表,DELETE语句只删除T2表中的行。类似地,如果省略t2表,DELETE语句将只删除T1表中的行。

希望这对你有所帮助。

您只需要指定在哪些表上应用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…;