ORA-01427: однострочный подзапрос возвращает более одной строки Обновить SQL-запрос - PullRequest
1 голос
/ 15 мая 2019

Я пытаюсь обновить столбец, где найти дубликат CNICNO и обновить столбец.Но я получаю следующую ошибку

ORA-01427: single-row subquery returns more than one row

Когда я запрашиваю, чтобы найти дубликаты записей CNICNO для HOFID, тогда показывают 5 дублирующихся записей

Запрос дублирующихся записей:

SELECT hofid
         FROM hof 
        WHERE cnicno IN (SELECT cnic_no FROM we_group_hof_k)

Записи:

[1]: https://i.stack.imgur.com/ltC1m.png

В таблице "WE_GROUP_HOF_K" в столбце "GROUP_ID" отсутствуют записи.Я хочу обновить записи "HOFID" с помощью столбца "GROUP_ID".

SQL QUERY:

UPDATE we_group_hof_k
SET group_id = (SELECT cnicno
         FROM hof 
        WHERE cnicno IN (SELECT cnic_no FROM we_group_hof_k));

Как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Если я не ошибаюсь, разве UPDATE не должно выглядеть так?

UPDATE we_group_hof_k w
   SET w.GROUP_ID =
          (SELECT h.cnicno
             FROM hof h
            WHERE h.cnicno = w.cnic_no);

Вместо IN объедините соответствующие столбцы в таблицу для обновления (we_group_hof_k) с таблицей источника данных (hof).

1 голос
/ 15 мая 2019

Сообщение об ошибке в значительной степени обостряет проблему - ваш подзапрос:

SELECT cnicno
         FROM hof 
        WHERE cnicno IN (SELECT cnic_no FROM we_group_hof_k)

возвращает несколько строк. Но UPDATE требуется одно значение, поэтому вы должны убедиться, что ваш подзапрос возвращает только одну строку. Вы должны убедиться, что ваш подзапрос никогда не возвращает несколько строк (вы можете использовать агрегатную функцию, например MAX(), но вы должны убедиться, что она соответствует потребностям вашего бизнеса).

...