代码之家  ›  专栏  ›  技术社区  ›  fabrik

使用MySQL左联接删除行

  •  163
  • fabrik  · 技术社区  · 15 年前

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

    我可以很容易地 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 )

    但是当我想从 最后期限 ,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服务器版本相对应的手册,以了解使用“左连接”附近的右语法。 工作 on deadline.job_id=job.job_id其中 地位 =第1行的“szaml”

    我怎么能把我的 选择 进入工作状态 DELETE 查询?

    5 回复  |  直到 6 年前
        1
  •  295
  •   Daniel Vassallo    15 年前

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

    只删除 deadline 排:

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

    删除 最后期限 job 排:

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

    只删除 工作 排:

    DELETE `job` FROM `deadline` LEFT JOIN `job` ....
    
        2
  •  34
  •   Roman Losev    10 年前

    如果您使用“table as”,请指定要删除的表。

    在这个例子中,我删除了所有在表2中不存在的表1行。

    DELETE t1 FROM `table_1` t1 LEFT JOIN `table_2` t2 ON t1.`id` = t2.`id` WHERE t2.`id` IS NULL
    
        3
  •  2
  •   Francisco Soto    15 年前
    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列。

        4
  •  1
  •   Zon    7 年前

    试试这个:

    DELETE `deadline`
    FROM `deadline`
    INNER JOIN `job` ON `deadline`.`job_id` = `job`.`id`
    WHERE `job`.`id` = 123
    
        5
  •  0
  •   Tahir    6 年前

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

    希望能帮上忙。

    推荐文章