UPDATE i zlozona klauzula where
Darek - 21-06-2006 00:10
UPDATE i zlozona klauzula where
Potrzebuje zrobic update jednej kolumny na pewnej tabeli, tyle ze wiersze ktore maja ulec aktualizacji maja zlozona klauzule where:
Uproszczona tabela:
create table my_table( id1 char(32) not null, id2 integer not null, id3 char(5) not ull, id4 char(5) not null, updateCol integer default 0 not null, .... pozostale kolumny );
Kolumny od id1 do id4 tworza klucz glowny. A ja potrzebuje nadac wartosc 1 kolumnie updateCol dla wierszy, ktore zostaja zwrocone przez taki select:
select id1, max(id2), id3, id4 from my_table group by id1, id3, id4
trudnosc dla mnie polega na tym ze w klauzuli where jest nie jedna ale 4 kolumny i agregacja.
Dodatkowo mam bazy w DB2, Oracle i SQL Server i musze to uruchomic na kazdej z nich (oczywiscie moze byc rozna skladnia).
Jakies pomysly?
Dziekuje Darek
Grzegorz Danowski - 21-06-2006 00:10
Uzytkownik "Darek" <dwojtas@gmail.com> napisal w wiadomosci news:1150793288.076843.291390@h76g2000cwa.googlegr oups.com... > Potrzebuje zrobic update jednej kolumny na pewnej tabeli, tyle ze > wiersze ktore maja ulec aktualizacji maja zlozona klauzule where: > > Uproszczona tabela: > > create table my_table( > id1 char(32) not null, > id2 integer not null, > id3 char(5) not ull, > id4 char(5) not null, > updateCol integer default 0 not null, > .... pozostale kolumny > ); > > Kolumny od id1 do id4 tworza klucz glowny. > A ja potrzebuje nadac wartosc 1 kolumnie updateCol dla wierszy, ktore > zostaja zwrocone przez taki select: > > select id1, max(id2), id3, id4 from my_table group by id1, id3, id4 > > trudnosc dla mnie polega na tym ze w klauzuli where jest nie jedna ale > 4 kolumny i agregacja. >
Spróbuj cos takiego:
Update my_table Set id2 = 1 From my_table As T Where Exists( Select 1 From my_table As M Where T.id1 = M.id1 And T.id3 = M.id3 And T.id4 = M.id4 Group By M.id1, M.id3, M.id4 Having Max(M.id2) = T.id2 )
Pozdrawiam Grzegorz
Darek - 21-06-2006 00:10
Usiadlem po raz kolejny, rozpisalem to jeszcze raz i znalazlem rozwiazanie ktore dziala. Mam nadzieje ze nie zrobilem bledow tlumaczac zapytanie na nazwy podane we wczesniejszym pytaniu. Moze to sie komus kiedys przyda.
update my_table set updateCol=1 where exists (select innerAlias.i1 from (select id1 i1, max(id2) i2, id3 i3, id4 i4 from my_table group by id1, id2, id3) as innerAlias where id1=innerAlias.i1 and id2=innerAlias.i2 and id3=innerAlias.i3 and id4=innerAlias.i4 )
Update na wierszach zwroconych przez zapytanie zagniezdzone.
Pozdrawiam Darek
Kmail - 21-06-2006 00:10
>Kolumny od id1 do id4 tworza klucz glowny. >A ja potrzebuje nadac wartosc 1 kolumnie updateCol dla wierszy, ktore >zostaja zwrocone przez taki select: > select id1, max(id2), id3, id4 from my_table group by id1, id3, id4
taka wynika z tojego pytania odpowiez:
update my_table set updateCol = 1 where id1= :id1 and id2= :id2 and id3= :id3 and id4= :id4
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?=
Która z baz: [PGSQL] czy [MySQL] będzie lepsza w takim zastosowaniu (masowe UPDATE)
MSSQL - =?iso-8859-2?Q?kolejno=B6=E6?= przetwarzania przy UPDATE
=?ISO-8859-2?Q?[MSSQL_2005_+.NET]_Dramatycznie_d=B3ugi_Update_bazy_....?=
=?iso-8859-2?Q?=5Bmssql=5D_update_na_kilku_tabelach_jednocze= B6nie?=
=?ISO-8859-2?Q?[MS_SQL]_update_wielu_p=F3l_na_raz_z_selecta?=
=?iso-8859-2?Q?=5Bpgsql=5D_update_podw=F3jnego_z=B3=B1czenia? =
[Oracle] Jak opymalnie update'owac tabele danymi z innej tabeli
[MYSQL] Update if =?ISO-8859-2?Q?kom=F3rka_is_null?=
[db2] Update sql posiłkowany danymi z innej tabeli
zanotowane.pldoc.pisz.plpdf.pisz.plnatalia97.htw.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 |
|