【问题标题】:delete query in mysql [closed]在mysql中删除查询[关闭]
【发布时间】:2016-06-27 17:09:20
【问题描述】:

我有这些表:

表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

我想要的是删除名称为name2和name3的行不使用连接

我尝试了以下方法:

DELETE FROM table2 WHERE right_id in (19, 22);
DELETE FROM table1 WHERE name in ('name2','name3');

它有效,但我想要将 name2 和 name3 放入变量中,而不是直接使用 19 和 22。

【问题讨论】:

  • 您是否要求从 table2 中删除引用 table1 中的行的相同行,而无需指定?对您的要求有点困惑
  • 为什么没有连接?
  • 我很困惑,第一次删除不应该“起作用”,因为table2 中没有具有right_id 中这些值的行。我看不出这两个表之间有任何明显的关系。

标签: java mysql sql sql-delete


【解决方案1】:

您可以在第一次删除时在 in 运算符中使用子查询:

DELETE FROM table2
WHERE  right_id IN (SELECT id
                    FROM   table1
                    WHERE  name IN ('name2', 'name3'))

【讨论】:

    【解决方案2】:

    我觉得这个问题有一个小问题,

    DELETE FROM table2 WHERE right_id in (19, 22);
    

    似乎是错误的。如果你想删除name2和name3的,这与id 2和3有关。因为right_id是指id,所以应该是,

    DELETE FROM table2 WHERE right_id in (2, 3);
    

    但是回答你,你可以使用没有连接的子查询,如下所示

    DELETE FROM table2 WHERE right_id in (SELECT id FROM table1 where name in ('name2','name3'));
    

    【讨论】:

      【解决方案3】:

      假设您要求从 table2 中删除,无论您从 table1 中删除什么,您都想使用嵌套查询。

      DELETE FROM table2 WHERE right_id IN (SELECT id
                                            FROM table1
                                            WHERE name IN ('name2', 'name3'))
      

      编辑:您也可以使用join

      DELETE FROM table2 as t2, table1 as t1
      WHERE t1.id = t2.right_id AND t1.name IN ('name2', 'name3')
      

      【讨论】:

      • 感谢,修复并添加了加入选项
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-28
      • 1970-01-01
      相关资源
      最近更新 更多