/ / Alternatywna aktualizacja zapytania SQL - sql, oracle

Alternatywna aktualizacja zapytania SQL - sql, oracle

Poszukuję alternatywy dla tego zapytania. Wiem, że takie zapytanie zakończy się nieprawidłowym identyfikatorem w Oracle. Proszę więc podać mi to samo zapytanie o aktualizację jednego pliku z innego pola w innej tabeli.

update RBT_CMP_RECOM_9304
set FIRST_RECOM_NAME=(select rbt_cmp_base_code.RBT_NAME
from rbt_cmp_base_code
where rbt_cmp_base_code.RBT_CODE=RBT_CMP_RECOM_9304.FIRST_RECOM)
where rbt_cmp_base_code.RBT_CODE=RBT_CMP_RECOM_9304.FIRST_RECOM;

FYI:

RBT_CMP_RECOM_9304=(firt_recom,first_recom_name)

RBT_CMP_BASE_CODE = (rbt_code, rbt_name)

Otrzymuję ten błąd, gdy go wypróbuję:

ORA-00904: RBT_CMP_BASE_CODE.RBT_CODE: nieprawidłowy identyfikator

Pozdrowienia.

Odpowiedzi:

3 dla odpowiedzi № 1

Jednym ze sposobów jest powtórzenie podkwerendy:

update RBT_CMP_RECOM_9304 r
set FIRST_RECOM_NAME = (select bc.RBT_NAME
from rbt_cmp_base_code bc
where bc.RBT_CODE = r.FIRST_RECOM
)
where exists (select 1
from rbt_cmp_base_code bc
where bc.RBT_CODE = r.FIRST_RECOM
);

EDYTOWAĆ:

Jeśli otrzymujesz błąd, który dotyczy więcej niż jednegowiersz jest zwracany, wtedy musisz zdecydować, która wartość. Nic w twoim kodzie nie sugeruje, że to może być problem (wskazówka: przykładowe dane i pożądane wyniki zawsze pomagają w pytaniu).

Najprostszym rozwiązaniem jest użycie i funkcja agregacji:

update RBT_CMP_RECOM_9304 r
set FIRST_RECOM_NAME = (select max(bc.RBT_NAME)
from rbt_cmp_base_code bc
where bc.RBT_CODE = r.FIRST_RECOM
)
where exists (select 1
from rbt_cmp_base_code bc
where bc.RBT_CODE = r.FIRST_RECOM
);

Ale możesz chcieć naprawić rbt_cmp_base_code tabela, więc nie ma duplikatów. Z nazwy tabeli wynika, że ​​powinien być jeden wiersz na kod.