【问题标题】:Deleting row from table using mysql使用mysql从表中删除行
【发布时间】:2016-10-29 08:50:46
【问题描述】:

表1

id   type       name       parent    group_id
1    special    name1      0         21
2    Group      name2      1         19
3    Group      name3      1         22
4    special    name4      0         89

表2

id   version    mcs        user    right_id
1    0          15          27          3
2    0          15          27          4

table2 中的 right_id 引用了 table1 中的 id。
我想要的是删除 table1 中 name = name2 和 name3 的行。 这个怎么做?

【问题讨论】:

  • right_id 列是否有外键约束?
  • 是的,我有一个关键缺点。
  • 如果键约束为“删除级联”,则可以对父表本身使用简单的删除查询。
  • sorry..我查了一下发现没有约束
  • ohk.. 我已经发布了查询作为答案。如果您没有约束,您可以使用它,但在需要时使用约束是一种很好的做法。

标签: java mysql


【解决方案1】:

使用下面提到的查询从两个表中删除所需的数据

 delete * from table1 as a join table2 as b on a.id=b.right_id where 
 a.name in ('name2','name3')

【讨论】:

    【解决方案2】:

    除了上述答案之外,如果您希望在删除父表 table1 中的任何行时,自动删除 table2 中与 table1 中的 id 值相同的 right_id 值的行,那么您需要使用 ON在 table2 的创建脚本中删除 CASCADE 子句。

    看到这个http://www.techonthenet.com/oracle/foreign_keys/foreign_delete.php

    【讨论】:

    • 获得特权很难,但负责任地使用它更难。请我为反对票请求解释。
    【解决方案3】:

    您可以使用以下查询从两个表中删除记录:

    DELETE a,b FROM table2 AS a 
    INNER JOIN table1 AS b ON a.right_id = b.id 
    WHERE b.name IN ('name1', 'name2');
    

    【讨论】:

    • 它说未知的列名!!
    • table1中没有名为name的列
    • 正如您在问题中提到的,table1 中有一个名为 name 的列。请查看您的原始表并根据列名更新查询
    【解决方案4】:
    DELETE FROM table1 AS A 
    INNER JOIN table2 AS B ON A.ID = B.RIGHT_ID 
    WHERE A.NAME IN (name1, name2)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-01
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 2015-08-23
      • 1970-01-01
      相关资源
      最近更新 更多