ОБНОВЛЕНИЕ НАБОРА приращения ВНУТРЕННЕГО СОЕДИНЕНИЯ, мой выбор работает, но не обновляется

#php #sql #sql-update #inner-join

Вопрос:

У меня есть следующая команда SQL. Здесь есть два стола,

таблица с именем rbhl_link nodes выглядит следующим образом

 Id, Node1, Node2 1 , 6 , 7  

таблица с именем rbhl_nodelist содержит кучу данных, включая идентификатор и r, мне нужно изменить значение r

 Id, R 6, 15 7, 15  

Команда select работает и отображает мне приведенный выше результат. Когда я пытаюсь поменять его с помощью обновления, это не работает.

 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 с помощью одной команды.

Ответ №1:

У тебя почти получилось.

Создать тестовый случай:

 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 | lt;--- OK | 7 | 12 | lt;--- OK | 16 | 15 | | 17 | 15 | | 26 | 15 | | 27 | 15 |  ------ ------   

Итак, порядок таков:
Обновить
присоединяйтесь
установите, где

=)

Комментарии:

1. Спасибо!!! Я сходил с ума, пытаясь понять это. Да благословит Господь stackoverflow и людей, которые оказывают свою помощь!

Ответ №2:

Попробуй 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 )