[SQL] Update tabeli z subselectem
Veeteq - 27-09-2007 00:09
[SQL] Update tabeli z subselectem
Cześć
mam taką zagadkę nad którą głowię się od dłuższego czasu, otóż: jest tabela Wnioski (id_wn, id_klt, data_wn, miasto) na wejściu miasto jest puste i tutaj próbuję zrobić update z tabel z informacjami o klientach i miastach. Dla trudności miasto w czasie sie zmienia ale te dane są pamiętane.
UPDATE Wnioski wwp SET (Miasto) = (SELECT miasta.name FROM Wnioski wn, Klienci klt, Miasta WHERE wn.id_klt = klt.id_klt AND klt.id_miasta = Miasta.id_miasta AND (klt.data_od<wn.data_wn AND klt.data_do>wn.data_wn))
sam SELECT działa OK, tzn gdyby chieć złożyć te 3 tabele to dostanę co potrzebuję, natomiast przy UPDATE pojawia sie błąd że "jednowierszowe zapytanie zwraca więcej niż jeden wiersz". Table klienci niestety nie jest wolna od błędów i czasami pojawiają się duplikaty że pod jedną datą istnieje kilka przypisać tego samego miasta.
dzięki ze ewentualne sugestie Veeteq
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Grzegorz Danowski - 27-09-2007 00:09
Użytkownik "Veeteq" <mw-magda.SKASUJ@gazeta.pl> napisał w wiadomości news:fddpb5$rqu$1@inews.gazeta.pl... > mam taką zagadkę nad którą głowię się od dłuższego czasu, otóż: > jest tabela Wnioski (id_wn, id_klt, data_wn, miasto) > na wejściu miasto jest puste i tutaj próbuję zrobić update z tabel z > informacjami o klientach i miastach. Dla trudności miasto w czasie sie > zmienia ale te dane są pamiętane. > > UPDATE Wnioski wwp SET (Miasto) = > (SELECT miasta.name > FROM Wnioski wn, Klienci klt, Miasta > WHERE wn.id_klt = klt.id_klt > AND klt.id_miasta = Miasta.id_miasta > AND (klt.data_od<wn.data_wn AND klt.data_do>wn.data_wn)) > > sam SELECT działa OK, tzn gdyby chieć złożyć te 3 tabele to dostanę co > potrzebuję, natomiast przy UPDATE pojawia sie błąd że "jednowierszowe > zapytanie zwraca więcej niż jeden wiersz". Table klienci niestety nie jest > wolna od błędów i czasami pojawiają się duplikaty że pod jedną datą > istnieje > kilka przypisać tego samego miasta.
Może do podselekta dodaj Top 1. G.
=?ISO-8859-2?Q?Marcin_Wr=F3blewski?= - 28-09-2007 00:11
Veeteq <mw-magda.SKASUJ@gazeta.pl> napisał(a):
> Cześć > > mam taką zagadkę nad którą głowię się od dłuższego czasu, otóż: > jest tabela Wnioski (id_wn, id_klt, data_wn, miasto) > na wejściu miasto jest puste i tutaj próbuję zrobić update z tabel z > informacjami o klientach i miastach. Dla trudności miasto w czasie sie > zmienia ale te dane są pamiętane. > > UPDATE Wnioski wwp SET (Miasto) = > (SELECT miasta.name > FROM Wnioski wn, Klienci klt, Miasta > WHERE wn.id_klt = klt.id_klt > AND klt.id_miasta = Miasta.id_miasta > AND (klt.data_od<wn.data_wn AND klt.data_do>wn.data_wn)) > > sam SELECT działa OK, tzn gdyby chieć złożyć te 3 tabele to dostanę co > potrzebuję, natomiast przy UPDATE pojawia sie błąd że "jednowierszowe > zapytanie zwraca więcej niż jeden wiersz". Table klienci niestety nie jest > wolna od błędów i czasami pojawiają się duplikaty że pod jedną datą istnieje > kilka przypisać tego samego miasta. > > dzięki ze ewentualne sugestie > Veeteq >
A jaka baza? Ogólnie to trzeba zadbać, żeby to podzapytanie zwracało dokładnie jeden wiersz. W oracle'u dodasz do niego warunek ROWNUM = 1, w mysql (chyba) LIMIT 1, a pewnie w innych bazach jeszcze co innego.
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
rogacewi - 28-09-2007 00:11
Veeteq pisze: > Cześć > > mam taką zagadkę nad którą głowię się od dłuższego czasu, otóż: > jest tabela Wnioski (id_wn, id_klt, data_wn, miasto) > na wejściu miasto jest puste i tutaj próbuję zrobić update z tabel z > informacjami o klientach i miastach. Dla trudności miasto w czasie sie > zmienia ale te dane są pamiętane. > > UPDATE Wnioski wwp SET (Miasto) = > (SELECT miasta.name > FROM Wnioski wn, Klienci klt, Miasta > WHERE wn.id_klt = klt.id_klt > AND klt.id_miasta = Miasta.id_miasta > AND (klt.data_od<wn.data_wn AND klt.data_do>wn.data_wn)) > > sam SELECT działa OK, tzn gdyby chieć złożyć te 3 tabele to dostanę co > potrzebuję, natomiast przy UPDATE pojawia sie błąd że "jednowierszowe > zapytanie zwraca więcej niż jeden wiersz". Table klienci niestety nie jest > wolna od błędów i czasami pojawiają się duplikaty że pod jedną datą istnieje > kilka przypisać tego samego miasta. > > dzięki ze ewentualne sugestie > Veeteq >
Spróbuj tak:
UPDATE wwp SET wwp.Miasto = m.Miasta FROM Wnioski wwp JOIN Klienci klt ON klt.id_klt = wwp.id_klt JOIN Miasta m ON m.id_miasta = klt.id_miasta WHERE klt.data_od < wn.data_wn AND klt.data_od < wn.data_wn
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.plwawa19wwa91.pev.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 |
|