• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Update z podzapytaniem w pl/sql

Aruba Cloud - Virtual Private Server VPS
0 głosów
796 wizyt
pytanie zadane 7 października 2021 w SQL, bazy danych przez Grzegorzko Obywatel (1,110 p.)

Wie ktoś może gdzie leży błąd logiczny w poniższym zapytaniu u jak to naprawić?

2 odpowiedzi

0 głosów
odpowiedź 7 października 2021 przez Wiciorny Ekspert (280,450 p.)

Zauważ że twoje pole w bazie np. date_to = ... powinno przyjąć jedną wartość ( według skryptu którego piszesz ) , natomiast select który jest podzapytaniem zwraca więcej niż jeden wiersz stąd tutaj jest błą wykonaj "osobno" selekty zagnieżdżone i sprawdź co zwracają. 

komentarz 7 października 2021 przez Grzegorzko Obywatel (1,110 p.)
Właśnie problem polega na tym ,że ja muszę te wszystkie rekordy ,które są w podzapytaniu updatować .
komentarz 7 października 2021 przez Wiciorny Ekspert (280,450 p.)
okej ale ty chcesz updateować pole data_to ... a w tym momencie do tego pola przypisujesz kilka wartości ...
jesli podzapytanie ma zwracac wszystkie rekordy du aktualizacji to ma występować po where... a wartość która ma byc nowa dla kolumny data_to to ma byc 1-wartość ... a ty próbujesz zapisać kilka
0 głosów
odpowiedź 8 października 2021 przez areklipno Stary wyjadacz (11,930 p.)

czytając komentarze do poprzedniej odpowiedzi wg mnie powinieneś zrobić coś na zasadzie "update ... from ..." czyli

update tabela1 
set poletabela1 = poletabela2
from (
select poletabela2, polelaczacetabela2
from tabela2
) as dane 
where polelaczacetabela2 = polelaczacetabela1

składnia jest z postgresql (nie wiem jakiego silnika używasz)

oczywiście pól łączących i pól do aktualizacji może być więcej niż jedno

 

komentarz 8 października 2021 przez Grzegorzko Obywatel (1,110 p.)
Zrobiłem w ten sposób i nadal bez efektu.

update cmi_acct_per_audit_adp
set date_to = (SELECT data_do
FROM (SELECT LEAD (date_from,1) OVER ( ORDER BY date_from) AS data_do FROM cmi_acct_per_audit_adp)
)
WHERE
(per_id, acct_id) IN
(select per_id,ACCT_ID from cmi_acct_per_audit_adp
where date_to is null group by per_id,ACCT_ID having count(1)>1);
komentarz 8 października 2021 przez areklipno Stary wyjadacz (11,930 p.)

źle to zrobiłeś....

musi być coś w stylu:

update cmi_acct_per_audit_adp
set date_to = data_to_new
from (
select data_to as data_to_new, per_id as per_id2, ACCT_ID as acct_id2
from ..... ---tutaj dalsza część zapytania
) ddd
where per_id = per_id2 and acct_id = acct_id2

 

Podobne pytania

0 głosów
1 odpowiedź 1,838 wizyt
0 głosów
1 odpowiedź 821 wizyt
pytanie zadane 28 stycznia 2019 w SQL, bazy danych przez Drax Użytkownik (630 p.)
0 głosów
1 odpowiedź 381 wizyt
pytanie zadane 6 stycznia 2019 w SQL, bazy danych przez matiibal Użytkownik (620 p.)

93,329 zapytań

142,323 odpowiedzi

322,400 komentarzy

62,663 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...