我有两张桌子,一张用于工作截止日期,一张用于描述工作。每个作业都可以处于状态,一些状态意味着必须从另一个表中删除作业的截止日期。
我可以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
属于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'
MySQL错误没有说明:
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在'left JOIN
job
附近使用正确的语法在deadline.job_id = job.job_id WHEREstatus
='szaml'在第1行
如何将SELECT
转换为有效的DELETE
查询?
答案 0 :(得分:300)
您只需指定要应用DELETE
的表。
仅删除deadline
行:
DELETE `deadline` FROM `deadline` LEFT JOIN `job` ....
删除deadline
和job
行:
DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` ....
仅删除job
行:
DELETE `job` FROM `deadline` LEFT JOIN `job` ....
答案 1 :(得分:34)
如果您使用“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
答案 2 :(得分:2)
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列。
答案 3 :(得分:1)
尝试一下:
DELETE `deadline`
FROM `deadline`
INNER JOIN `job` ON `deadline`.`job_id` = `job`.`id`
WHERE `job`.`id` = 123
答案 4 :(得分:0)
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表中的行。
希望获得帮助。
答案 5 :(得分:0)
这个脚本对我有用:
DELETE t
FROM table t
INNER JOIN join_table jt ON t.fk_column = jt.id
WHERE jt.comdition_column…;