[db2] Update sql posiłkowany danymi z innej tabeli
Jolanta Pawelska - 21-12-2005 12:14
[db2] Update sql posiłkowany danymi z innej tabeli
Problem wygląda mniej więcej tak: mam jakąś tabelę IN z przygotowanymi danymi postaci (id, wartosc1, wartosc2, ...)
Chcę teraz wykonać update sql jakiejś innej tabeli T, gdzie updatuję rekordy w sposób taki: dopasowuję rekordy po id a udatuje wybrane (ustalane w zapytaniu update) kolumny wartościami z tej tabeli. Czyli chcę wykonać duży update tabeli T wykorzystując dane z tabeli IN, gdzie w przybliżeniu tabela IN zawiera jakiś podzbiór kolumn tabeli T, w tym klucze główne.
Interesuje mnie czy takie zapytanie da się łatwo wykonać bez mnożenia niemal identycznych podzapytań dla każdej modyfikowanej kolumny. Być może jest na tę okazję jakas specjalna składnia uzywająca "with" albo cos w tym rodzaju.
Pozdrawiam jola
Filip Sielimowicz - 21-12-2005 12:14
Użytkownik "Jolanta Pawelska" <jolanta@hands.com.pl> napisał w wiadomości news:dnosck$5n5$1@nemesis.news.tpi.pl... > Problem wygląda mniej więcej tak: mam jakąś tabelę IN z przygotowanymi > danymi postaci (id, wartosc1, wartosc2, ...) > > Chcę teraz wykonać update sql jakiejś innej tabeli T, gdzie updatuję rekordy > w sposób taki: dopasowuję rekordy po id a udatuje wybrane (ustalane w > zapytaniu > update) kolumny wartościami z tej tabeli. Czyli chcę wykonać duży update > tabeli T > wykorzystując dane z tabeli IN, gdzie w przybliżeniu tabela IN zawiera jakiś > podzbiór kolumn > tabeli T, w tym klucze główne. > > Interesuje mnie czy takie zapytanie da się łatwo wykonać bez mnożenia niemal > identycznych > podzapytań dla każdej modyfikowanej kolumny.
Nie wiem jak w innych bazach, ale w db2 jest akurat bardzo wygodna konstrukcja, która rozwiązuje ten problem:
update T t
set (c0, c1, ...)=(
select cin0, cin1, ...
from INN inn
where t.id=inn.id
)
Filip Sielimowicz - 21-12-2005 12:14
Użytkownik "Filip Sielimowicz" <sielim@poczta.onet.pl> napisał w wiadomości news:dnoujj$gmk$1@news.onet.pl... > Nie wiem jak w innych bazach, ale w db2 jest akurat bardzo wygodna konstrukcja, > która rozwiązuje ten problem: > > update T t > > set (c0, c1, ...)=( > > select cin0, cin1, ... > > from INN inn > > where t.id=inn.id > > )
.... a żeby było już super tak jak trzeba, to:
update T t set (c0, c1, ...)=( select cin0, cin1, ... from INN inn where t.id=inn.id ) where id in (select id from INN)
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?=
Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?=
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
=?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=
[Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?=
=?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
[newbie] MS SQL - praca =?ISO-8859-2?Q?jednocze=B6nie_na_2_?==?ISO-8859-2?Q?bazach_=28linkowanie_=3F=29?=
zanotowane.pldoc.pisz.plpdf.pisz.plred-hacjenda.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|