【问题标题】:Delete from multiple tables query从多个表查询中删除
【发布时间】:2013-01-14 15:46:41
【问题描述】:

我想从这个基于reserveringsnr的查询中删除所有这些结果。

(SELECT DISTINCT res.reserveringsnr, datum, begintijd, eindtijd, aantalpersonen, klantnr, betaald, tafr.tafelnr, menr.reserveringsnr, menr.menunr, menr.uniqueid FROM reserveringen as res
    INNER JOIN menus_regel as menr
    ON res.reserveringsnr = menr.reserveringsnr
    INNER JOIN tafels_regel AS tafr
    ON res.reserveringsnr = tafr.reserveringsnr
    WHERE res.reserveringsnr = '21')

但这样的事情似乎不起作用

DELETE FROM 
(SELECT DISTINCT res.reserveringsnr, datum, begintijd, eindtijd, aantalpersonen, klantnr, betaald, tafr.tafelnr, menr.reserveringsnr, menr.menunr, menr.uniqueid FROM reserveringen as res
    INNER JOIN menus_regel as menr
    ON res.reserveringsnr = menr.reserveringsnr
    INNER JOIN tafels_regel AS tafr
    ON res.reserveringsnr = tafr.reserveringsnr
    WHERE res.reserveringsnr = '21')Delete
WHERE Delete.reserveringsnr = '21'

任何人都可以将我推向正确的方向吗? 提前致谢!

【问题讨论】:

  • 当您说要“删除所有这些结果”时,您是要从每个基础表中删除相关记录,还是只从其中一部分中删除?跨度>
  • delete from sometable where conditions IN (your select up there)?请注意,在 mysql 中,您无法更新/删除您也可以从中选择的内容。
  • 一般来说,一次只能从一个表中删除,从子表开始。

标签: php mysql sql sql-delete


【解决方案1】:

下面的查询将只删除表reserveringen 上的所有记录。

DELETE  res
FROM    reserveringen as res
        INNER JOIN menus_regel as menr
            ON res.reserveringsnr = menr.reserveringsnr
        INNER JOIN tafels_regel AS tafr
            ON res.reserveringsnr = tafr.reserveringsnr
WHERE   res.reserveringsnr = '21'

但是如果你想从所有reserveringsnr匹配的表中删除记录,那么你需要在DELETE子句中指定所有表名

DELETE  res, menr, tafr
FROM    reserveringen as res
        INNER JOIN menus_regel as menr
            ON res.reserveringsnr = menr.reserveringsnr
        INNER JOIN tafels_regel AS tafr
            ON res.reserveringsnr = tafr.reserveringsnr
WHERE   res.reserveringsnr = '21'

【讨论】:

  • 使用下面的第二个查询。
【解决方案2】:

如果您必须在一行中完成,那么@JW 的答案看起来是正确的。但是,我更喜欢在单独的行中运行这些以解决性能问题——如果每个表中有很多记录,则连接将比单个删除花费更长的时间。

DELETE 
FROM reserveringen  
WHERE reserveringsnr = '21';

DELETE 
FROM menus_regel 
WHERE reserveringsnr = '21';

DELETE 
FROM tafels_regel 
WHERE reserveringsnr = '21'

这里有一个关于删除的有用链接:

http://dev.mysql.com/doc/refman/5.0/en/delete.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多