首页 文章

使用MySQL LEFT JOIN删除行

提问于
浏览
161

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

我可以轻松 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 on deadline.job_id = job.job_id WHERE status ='szaml'第1行附近使用正确的语法

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

4 回答

  • 0

    试试这个:

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

    您只需指定要应用 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` ....
    
  • 288
    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列 .

  • 2

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

相关问题