SQL UPDATE несколько строк сразу после SELECT - PullRequest
0 голосов
/ 26 августа 2018

Моя таблица образцов:

+------------+------------+------+-----+---------+-------+
| Field      | Type       | Null | Key | Default | Extra |
+------------+------------+------+-----+---------+-------+
| id         | bigint(20) | YES  |     | NULL    |       |
| other_id   | bigint(20) | YES  |     | NULL    |       |
| another_id | bigint(20) | YES  |     | NULL    |       |
+------------+------------+------+-----+---------+-------+

+------+----------+------------+
| id   | other_id | another_id |
+------+----------+------------+
|  988 |      102 |       NULL |
|  989 |      103 |       NULL |
|  990 |      104 |       NULL |
|  991 |      105 |       NULL |
|  992 |      106 |       NULL |
|  987 |      101 |       NULL |
+------+----------+------------+

Как бы я ВЫБИРАЛ и ОБНОВЛЯЛ вышеупомянутую таблицу в одном запросе, чтобы сделать что-то подобное для каждой строки:

UPDATE
    x
SET 
    another_id = 987
WHERE
    id = 987
    AND other_id = 101;
UPDATE
    x
SET 
    another_id = 988
WHERE
    id = 988
    AND other_id = 102

Я бы не хотел запускать ручное обновление, подобное этому, для каждой строки и хотел бы сделать все это за один раз.

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Тень верна в своем заявлении на обновление. Похоже, вы хотите перенести все ID прямо в ANOTHER_ID. Если вы хотите, чтобы это происходило только тогда, когда «Other_ID» является заданным диапазоном, просто добавьте «где other_id между 101 и 21234» или любой другой диапазон, для которого вы хотите, чтобы это произошло.

Чтобы увидеть результаты ответа Шэдоу, измените его на простой оператор SELECT, чтобы увидеть. Если это правильно, перейдите на версию обновления. Пример ...

Select
      ID,
      ID AS Another_ID,
      Other_ID
   from
      YourTable

вы получите все записи, показывающие два столбца с идентификатором AS "Another_ID". Он НЕ ОБНОВЛЯЕТ столбец "Another_ID", просто запрашивает значение как имя столбца результата. Опять же, если вам нужен только определенный диапазон чисел, просто добавьте

   where Other_ID between 101 and 21234

(или любой другой диапазон значений)

Теперь, чтобы увидеть, что команда UPDATE точно так же, как Shadow TRIED, чтобы объяснить ..

update YourTable set
      AnotherID = ID

и ВСЕ записи обновляются ... Если в пределах определенного диапазона ... используйте то же выражение where, что и Select.

Если вы хотите попробовать это, не испортив производственные данные, работайте с временной фиктивной таблицей, которую вы всегда можете удалить после того, как закончите ..

insert into MyTempTable 
   ( ID, 
     Another_ID, 
     Other_ID 
   ) 
   select ID, Another_ID, Other_ID
      From YourTable
      where ID between 500 and 800

Теперь у вас есть тестовый стол, чтобы поиграть со столом вставки и увидеть результат ...

0 голосов
/ 26 августа 2018

Мне кажется, что вы просто хотите установить значение another_id в id:

UPDATE
    x
SET 
    another_id = id

Вы можете указать диапазон значений other_id в предложении where, если вам нужнодля ограничения количества обновляемых строк:

UPDATE
    x
SET 
    another_id = id
WHERE other_id IN (...) --list the values you want here.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...