【问题标题】:UPDATE SET Increment INNER JOIN, my select works but not updateUPDATE SET Increment INNER JOIN,我的选择有效但不更新
【发布时间】:2021-12-26 07:35:45
【问题描述】:

我有以下 SQL 命令。 有两张表,

名为 rbhl_linkednodes 的表如下所示

Id, Node1, Node2
1 , 6 , 7

名为 rbhl_nodelist 的表有一堆数据,包括 id 和 r, 我需要更改 r 值

Id, R
6, 15
7, 15

选择命令有效并显示了上述结果。 当我尝试用更新换掉它时,它不起作用。

UPDATE rbhl_nodelist
SET nl.r = nl.r - 3
FROM rbhl_nodelist nl
INNER JOIN rbhl_linkednodes ln
ON ln.node1 = nl.id or ln.node2 = nl.id
WHERE ln.id = 1;

SELECT nl.r
FROM rbhl_nodelist nl
INNER JOIN rbhl_linkednodes ln
ON ln.node1 = nl.id or ln.node2 = nl.id
WHERE ln.id = 1;

目标是使用一个命令一次将两个值减 3。

【问题讨论】:

    标签: php sql sql-update inner-join


    【解决方案1】:

    试试Not Exists

    update rbhl_nodelist
    set r = r - 3
    from rbhl_nodelist t1
    where exists (
    select 1 from rbhl_linkednodes t2
    where t2.ID = 1
    and t2.node1 = t1.id
    or t2.node2 = t1.id
    )
    

    【讨论】:

      【解决方案2】:

      几乎拥有它。

      创建测试用例:

      CREATE TABLE rbhl_linkednodes (
          id int auto_increment primary key,
          node1 varchar(255),
          node2 varchar(255)
      );
      
      CREATE TABLE rbhl_nodelist (
          id int,
          r int
      );
      
      insert into rbhl_linkednodes set node1 = 6, node2 = 7;
      insert into rbhl_linkednodes set node1 = 16, node2 = 17;
      insert into rbhl_linkednodes set node1 = 26, node2 = 27;
      
      insert into rbhl_nodelist set id = 6, r = 15;
      insert into rbhl_nodelist set id = 7, r = 15;
      insert into rbhl_nodelist set id = 16, r = 15;
      insert into rbhl_nodelist set id = 17, r = 15;
      insert into rbhl_nodelist set id = 26, r = 15;
      insert into rbhl_nodelist set id = 27, r = 15;
      
      
      select * from rbhl_linkednodes;
      +----+-------+-------+
      | id | node1 | node2 |
      +----+-------+-------+
      |  1 | 6     | 7     |
      |  2 | 16    | 17    |
      |  3 | 26    | 27    |
      +----+-------+-------+
      select * from rbhl_nodelist;
      +------+------+
      | id   | r    |
      +------+------+
      |    6 |   15 |
      |    7 |   15 |
      |   16 |   15 |
      |   17 |   15 |
      |   26 |   15 |
      |   27 |   15 |
      +------+------+
      

      更新查询:

      UPDATE rbhl_nodelist nl
      INNER JOIN rbhl_linkednodes ln
      ON ln.node1 = nl.id or ln.node2 = nl.id
      SET nl.r = nl.r - 3
      WHERE ln.id = 1;
      

      结果

      select * from rbhl_linkednodes;
      +----+-------+-------+
      | id | node1 | node2 |
      +----+-------+-------+
      |  1 | 6     | 7     |
      |  2 | 16    | 17    |
      |  3 | 26    | 27    |
      +----+-------+-------+
      select * from rbhl_nodelist;
      +------+------+
      | id   | r    |
      +------+------+
      |    6 |   12 | <--- OK
      |    7 |   12 | <--- OK
      |   16 |   15 |
      |   17 |   15 |
      |   26 |   15 |
      |   27 |   15 |
      +------+------+
      

      所以顺序是:
      更新
      加入
      设置在哪里

      =)

      【讨论】:

      • 谢谢!!!我要疯了,想弄清楚。上帝保佑 stackoverflow 和给予他们帮助的人们!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多