【问题标题】:MySql delete from other table [duplicate]MySql从其他表中删除[重复]
【发布时间】:2017-10-20 15:45:12
【问题描述】:

我有两张桌子

表1:

pnr, dmax
01,  2017-02-02 11:10:00
02,  2017-05-02 10:10:10

和表2:

pnr, type, loc, dt
01,  c3,   l2,  2017-02-02 11:10:00
01,  c3,   l2,  2017-01-01 09:00:00
01,  c3,   l3,  2017-01-01 07:54:30
02,  c5,   l1,  2017-02-05 01:10:00
02,  c5,   l2,  2017-03-01 19:00:10
02,  c5,   l3,  2017-05-02 10:10:10

我喜欢删除 Table2 中的所有行,这对在 Table1 中找不到,但我受困于我有限的 mysql 知识

类似于 ..... 其中 pnr = pnr AND dmax != dt

请帮忙

【问题讨论】:

  • 你试过查询了吗?

标签: mysql delete-row


【解决方案1】:
DELETE  table2
FROM    table2
        LEFT JOIN table1
            ON table1.pnr = table2.pnr AND table1.dmax = table2.dt
WHERE   table1.pnr IS NULL

上面的语句使用了一个基本的 LEFT JOIN。这将在右侧表中返回 NULL,其中左侧没有找到记录,这些是我们要删除的记录,因此我们将 IS NULL 添加到 where 子句中

【讨论】:

  • 很好发现 - 现在已修改
  • 好的,添加基本解释
  • 感谢先生的快速帮助。这是我预期的工作
【解决方案2】:

您需要: DELETE FROM table2 WHERE NOT EXISTS (SELECT a.pnr, a.dmax FROM table1 a WHERE a.pnr = table2.pnr AND a.dmax = table2.dt)

【讨论】:

  • 您好,感谢您的帮助。毕竟,可以肯定的是,我编写了一个 PHP 程序来实现所需的逻辑(PHP 无论如何都是主程序的一部分),但我想跳过编写 PHP。您的查询删除的行数比我预期的要多得多。下面由@SEarle1986 回答,结果与 PHP 完全相同。无论如何,再次感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
  • 1970-01-01
相关资源
最近更新 更多