pl sql обновить строки со значением из той же таблицы - PullRequest
0 голосов
/ 19 марта 2019

В таблице агентов у меня есть поле bossId, которое является идентификатором другого агента, поэтому я сгенерировал данные для всех других полей в таблице агента, и теперь мне нужно установить bossId для всех строк.

Итак, каждая строканужно выбрать agentId для его поля bossId из той же таблицы.могут быть некоторые агенты с одним и тем же боссом, но агент не может быть самим боссом.

это таблица, которую у меня есть

+---------+------+--------+
| agentId | name | bossId |
+---------+------+--------+
|     123 | aaa  |        |
|     124 | bbb  |        |
|     125 | ccc  |        |
|     126 | ddd  |        |
+---------+------+--------+

требуемый результат:

+---------+------+--------+
| agentId | name | bossId |
+---------+------+--------+
|     123 | aaa  |    124 |
|     124 | bbb  |    123 |
|     125 | ccc  |    126 |
|     126 | ddd  |    123 |
+---------+------+--------+

поэтому пустой столбец bossId необходимо заполнить AgentId из той же таблицы, как это сделать в pl sql?

ОБНОВЛЕНИЕ: попытался использовать этот код, который, кажется, в порядке, но я получаю ошибки

begin
  for i in 1..17 loop
    update policeman p
    set bossid = (select p2.officerid
                 from policeman p2
                 order by dbms_random.value
                 where rownum = 1)
                 where rownum =i;
    end loop;
    end ;

ошибка:

ORA-06550: line 6, column 18:
PL/SQL: ORA-00907: missing right parenthesis
ORA-06550: line 3, column 5:
PL/SQL: SQL Statement ignored

Ответы [ 2 ]

1 голос
/ 19 марта 2019

Делает ли это то, что вы хотите?

update t
    set bossid = (select max(bossid) keep (dense_rank first order by dbms_random.random)
                  from t
                 );

Примечание: это может быть не очень эффективно, если ваши данные не маленькие.

0 голосов
/ 19 марта 2019

Это должно работать при условии уникальной агентиды.

update t tgt set bossid = (select max(agentid) from t src where tgt.agentid<>src.agentid);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...