210

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

我可以很容易地SELECT找到符合我的标准的工作/截止日期LEFT JOIN

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属于jobdeadline

但是当我想从中删除这些行时deadline,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 服务器版本相对应的手册以获取正确的语法,以便在第 1 行的“LEFT JOIN jobON 最后期限.job_id = job.job_id WHERE status= 'szaml”附近使用

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

4

6 回答 6

396

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

仅删除deadline行:

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

删除deadlinejob行:

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

仅删除job行:

DELETE `job` FROM `deadline` LEFT JOIN `job` ....
于 2010-05-04T06:26:51.887 回答
43

如果您使用“table as”,则指定它以删除。

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

DELETE t1 FROM `table_1` t1 LEFT JOIN `table_2` t2 ON t1.`id` = t2.`id` WHERE t2.`id` IS NULL
于 2013-05-16T12:05:01.427 回答
5
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 列。

于 2010-05-04T06:24:40.503 回答
4

这个脚本对我有用:

DELETE t
FROM table t
INNER JOIN join_table jt ON t.fk_column = jt.id
WHERE jt.comdition_column…;
于 2021-01-04T04:50:09.333 回答
3

试试这个:

DELETE `deadline`
FROM `deadline`
INNER JOIN `job` ON `deadline`.`job_id` = `job`.`id`
WHERE `job`.`id` = 123
于 2018-07-15T12:12:56.520 回答
1

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 表中的行。

希望这有帮助。

于 2019-02-19T06:57:20.423 回答