使用MySQL LEFT JOIN删除行

fab*_*rik 176 mysql left-join delete-row sql-delete

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

我可以通过以下方式轻松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'
Run Code Online (Sandbox Code Playgroud)

(不status属于job表格deadline)

但是当我想删除这些行时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'
Run Code Online (Sandbox Code Playgroud)

MySQL错误没有说明:

您的SQL语法有错误; 检查与您的MySQL服务器版本对应的手册,以便在第1行的'LEFT JOIN jobON deadline.job_id = job.job_id WHERE status='szaml' 附近使用正确的语法

如何将我SELECT变成一个有效的DELETE查询?

Dan*_*llo 320

您只需指定要应用的表DELETE.

仅删除deadline行:

DELETE `deadline` FROM `deadline` LEFT JOIN `job` ....
Run Code Online (Sandbox Code Playgroud)

删除deadlinejob行:

DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` ....
Run Code Online (Sandbox Code Playgroud)

仅删除job行:

DELETE `job` FROM `deadline` LEFT JOIN `job` ....
Run Code Online (Sandbox Code Playgroud)

  • 使用"AS"我必须使用my子句中的别名使其适用于我的目的(删除孤儿):DELETE t1 FROM table1 AS t1 LEFT JOIN t2 AS t2 ON t1.uid = t2.result WHERE t2.result IS NULL (3认同)

Rom*_*sev 37

如果您使用"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
Run Code Online (Sandbox Code Playgroud)


Ric*_*yen 6

这个脚本对我有用:

\n
DELETE t\nFROM table t\nINNER JOIN join_table jt ON t.fk_column = jt.id\nWHERE jt.comdition_column\xe2\x80\xa6;\n
Run Code Online (Sandbox Code Playgroud)\n


Fra*_*oto 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');
Run Code Online (Sandbox Code Playgroud)

我不确定这种子查询是否适用于 MySQL,但请尝试一下。我假设您的截止日期表中有一个 ID 列。


Zon*_*Zon 5

尝试这个:

DELETE `deadline`
FROM `deadline`
INNER JOIN `job` ON `deadline`.`job_id` = `job`.`id`
WHERE `job`.`id` = 123
Run Code Online (Sandbox Code Playgroud)