使用MySQL左联接删除行

使用MySQL左联接删除行,mysql,left-join,delete-row,sql-delete,Mysql,Left Join,Delete Row,Sql Delete,我有两张表格,一张是关于工作期限的,一张是关于描述工作的。每个作业都有一个状态,某些状态意味着必须从另一个表中删除作业的截止日期 我可以用左键轻松地选择符合我标准的作业/截止日期: SELECT * FROM `deadline` LEFT JOIN `job` ON deadline.job_id = job.job_id WHERE `status` = 'szamlazva' OR `status` = 'szamlazhato' OR `status` = 'fizetve' OR `s

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

我可以用左键
轻松地
选择符合我标准的作业/截止日期

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
的正确语法。job_id=job.job_id,其中第1行的状态
status
='szaml'

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

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` LEFT JOIN `job` ....
DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` ....
DELETE `job` FROM `deadline` LEFT JOIN `job` ....
删除
截止日期
作业
行:

DELETE `deadline` FROM `deadline` LEFT JOIN `job` ....
DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` ....
DELETE `job` FROM `deadline` LEFT JOIN `job` ....
仅删除
作业
行:

DELETE `deadline` FROM `deadline` LEFT JOIN `job` ....
DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` ....
DELETE `job` FROM `deadline` LEFT JOIN `job` ....
如果您使用的是“表格as”,则指定要删除的表格

在本例中,我删除了表2中不存在的所有表_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

MySQL允许您在DELETE语句中使用内部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 t
FROM table t
INNER JOIN join_table jt ON t.fk_column = jt.id
WHERE jt.comdition_column…;

OP仍然需要指定要删除的内容,以使查询明确无误。在子查询中使用
会使一切都慢得多。最好避免这种情况。在
DELETE
FROM
之间没有提到任何表。使用“AS”时,我必须在子句中使用别名来实现我的目的(删除孤立项):从表1中删除t1作为t1左连接t2作为t2 ON t1.uid=t2.result其中t2.result为null有趣的是,我的PHPMyAdmin 4.5.1语法检查器不会接受
DELETE
FROM
之间的任何内容,但当我按下Go时,查询运行正常。