【问题标题】:Multiple delete in two tables在两个表中多次删除
【发布时间】:2013-11-24 03:58:31
【问题描述】:

APP

柜台 |物品 100001 |圆珠笔 100002 |铅笔 100003 |证券纸 100004 |标记

Purchase_Order

柜台 |状态 100001 |是的 100001 |是的 100001 |是的 100004 |不

我想删除 apppurchase_order 表中的所有计数器 100001。我该怎么做?

这是我的代码

app.php

<a href="app.php?de='.$row["counter"].'">

if(isset($_GET['de']))
{
$del_id=$_GET['de'];

sql= ...

}

【问题讨论】:

    标签: php mysql sql mysqli


    【解决方案1】:

    一般方法查询如下所示

    DELETE a, p
      FROM 
    (
      SELECT 100001 counter
    ) q LEFT JOIN app a 
        ON q.counter = a.counter LEFT JOIN purchase_order p
        ON q.counter = p.counter;
    

    即使其中一个表中没有counter = 100001 的行,它也会删除两个表中的行

    这里是SQLFiddle演示

    【讨论】:

    • @altairelastname 有帮助吗?
    • 是的,它有帮助。但是我对 SELECT 100001 计数器感到困惑,你能提供一个链接或教程来最大限度地提高我的 SQL 技能吗?
    • @altairelastname 太好了!我很高兴它有帮助。其实这是一个非常简单的概念,你不需要教程。 MySQL 缺少FULL JOIN,因此为了确保最左边的表(因为我们使用LEFT JOIN)有一个具有所需值的行,我们只需将一个简单的选择包装到子查询中即时创建它。然后将两个实际的表留给它。
    • 你愿意检查我的新问题吗,stackoverflow.com/questions/19944345/… bcoz 我想你可以回答它。请
    【解决方案2】:

    试试下面的查询

    DELETE a.*,b.* FROM app as a LEFT JOIN purchase_order as b ON a.counter=b.counter WHERE a.counter=100001

    【讨论】:

      【解决方案3】:

      试试这个:

      sql= "DELETE FROM a.*, b.* from app a LEFT JOIN purchase_order b 
      on a.counter=b.counter where a.counter=".$del_id;
      

      【讨论】:

      • 从 a.*、b.* 中删除?
      • 来自“app”表。它将加入表(“app”作为a,“purchase_order”作为b)并删除所有具有匹配计数器编号的记录
      • 不工作。我使用 DELETE a.*, p.* FROM app a 并且它有效。这是如何工作的 a.counter=".$del_id?" 有什么用。 ?
      • 你能解释一下什么不起作用吗?回答你的问题——“一个”。“(点”在php中连接两个字符串。
      • 如果您使用我的答案,那么“p”将无处可去,它不应该工作。在我的回答中,我显然将“app”别名为“a”,将“puchase_order”别名为“b”。
      【解决方案4】:

      尝试以下方法:

      DELETE a.*, p.*
      FROM app a
      LEFT JOIN purchase_order p
          ON p.counter = a.counter
      WHERE a.counter = 100001
      

      【讨论】:

      • 好主意!但一个缺点是,如果 app 不包含任何带有 counter = 100001 的行,它将无法工作
      • 不知道为什么,purchase_order中的计数器没有删除。
      • @peterm 如果app 没有条目,我认为不会有任何purchase_orders 的日志。
      猜你喜欢
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      • 2020-06-08
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多