ďťż
 
[psql] problem z UPDATE'm dla nast. sytuacji ďťż
 
[psql] problem z UPDATE'm dla nast. sytuacji
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[psql] problem z UPDATE'm dla nast. sytuacji



obywatel - 22-07-2006 04:33
[psql] problem z UPDATE'm dla nast. sytuacji
  Witam wszystkich,

chcę zrobić następującą rzecz:

Dla przykładu są dwie tabele:

tabA:
id
startdateA
typ

tabB:
id
tabAid
startdateB

Potrzebuję uaktualnić (zastąpić) wartości pola startdateA w tabA
odpowiadającymi im wartościami startdateB z tabB (czyli z warunkiem
tabA.id = tabB.tabAid). Dodatkowy warunek dla update'a jest taki, że typ=4.

tabA ma więcej wierszy niż tabB więc nie wszystkie wiersze powinny być
zaktualizowane.

Na razie nie udało mi się napisać zapytania UPDATE, które by to
zrealizowało. Różnie próbowałem, np. tak:

update tabA set startdateA = tB.startdateB from tabA ta, tabB tB where
tA.id = tB.tabAid and tA.type = 4;

ale ciągle mi się nie udaje.

Bardzo proszę o jakieś wskazówki.

Pozdrawiam serdecznie





herakles - 22-07-2006 04:33

  obywatel wrote:

> Witam wszystkich,
>
> chcę zrobić następującą rzecz:
>
> Dla przykładu są dwie tabele:
>
> tabA:
> id
> startdateA
> typ
>
> tabB:
> id
> tabAid
> startdateB
>
> Potrzebuję uaktualnić (zastąpić) wartości pola startdateA w tabA
> odpowiadającymi im wartościami startdateB z tabB (czyli z warunkiem
> tabA.id = tabB.tabAid). Dodatkowy warunek dla update'a jest taki, że
> typ=4.
>
> tabA ma więcej wierszy niż tabB więc nie wszystkie wiersze powinny być
> zaktualizowane.
>
> Na razie nie udało mi się napisać zapytania UPDATE, które by to
> zrealizowało. Różnie próbowałem, np. tak:
>
> update tabA set startdateA = tB.startdateB from tabA ta, tabB tB where
> tA.id = tB.tabAid and tA.type = 4;

Pójdę na łatwizne:
select tabAid, max(startdateb) as startdateb into temp tymczas from tabB
group by tabAid;

update tabA set startdateA=tymczas.startdateb where id=tymczas.tabaid and
type=4 and startdateA!=tymczas.startdateb;
drop table tymczas;

teraz sobie popracuj aby nie było tabeli tymczasowej.




=?iso-8859-2?Q?Andrzej_Str=F3=BFy=F1ski?= - 22-07-2006 04:33

 
Użytkownik "obywatel" napisał:
> Witam wszystkich,
>
> chcę zrobić następującą rzecz:
>
> Dla przykładu są dwie tabele:
>
> tabA:
> id
> startdateA
> typ
>
> tabB:
> id
> tabAid
> startdateB
>
> Potrzebuję uaktualnić (zastąpić) wartości pola startdateA w tabA
> odpowiadającymi im wartościami startdateB z tabB (czyli z warunkiem
> tabA.id = tabB.tabAid). Dodatkowy warunek dla update'a jest taki, że
> typ=4.
>
> tabA ma więcej wierszy niż tabB więc nie wszystkie wiersze powinny być
> zaktualizowane.
>
> Na razie nie udało mi się napisać zapytania UPDATE, które by to
> zrealizowało. Różnie próbowałem, np. tak:
>
> update tabA set startdateA = tB.startdateB from tabA ta, tabB tB where
> tA.id = tB.tabAid and tA.type = 4;

wypróbuj to:

update tabA set startdateA = (select startdateB from tabB x where tabA.id =
x.tabAid)
from tabB
where tabA.id = tabB.tabAid and tabA.type = 4;

pozdrawiam
A.S.




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 22-07-2006 04:33

  obywatel wrote:
> Witam wszystkich,
>
> chcę zrobić następującą rzecz:
>
> Dla przykładu są dwie tabele:
>
> tabA:
> id
> startdateA
> typ
>
> tabB:
> id
> tabAid
> startdateB
>
> Potrzebuję uaktualnić (zastąpić) wartości pola startdateA w tabA
> odpowiadającymi im wartościami startdateB z tabB (czyli z warunkiem
> tabA.id = tabB.tabAid). Dodatkowy warunek dla update'a jest taki, że typ=4.
>
> tabA ma więcej wierszy niż tabB więc nie wszystkie wiersze powinny być
> zaktualizowane.
>
> Na razie nie udało mi się napisać zapytania UPDATE, które by to
> zrealizowało. Różnie próbowałem, np. tak:
>
> update tabA set startdateA = tB.startdateB from tabA ta, tabB tB where
> tA.id = tB.tabAid and tA.type = 4;

Wywal tabA z FROM.
Przy czym zapytanie będzie dobrze działało w przypadku relacji 1:1. Gdy
masz 1:n, nie wiesz która data zostanie podstawiona jako ostatnia, a
poza tym niepotrzebnie będzie się kilka razy ten sam rekord updajtował.

--
P.M.





obywatel - 22-07-2006 04:33

 
>> Na razie nie udało mi się napisać zapytania UPDATE, które by to
>> zrealizowało. Różnie próbowałem, np. tak:
>>
>> update tabA set startdateA = tB.startdateB from tabA ta, tabB tB where
>> tA.id = tB.tabAid and tA.type = 4;
>
> Wywal tabA z FROM.
> Przy czym zapytanie będzie dobrze działało w przypadku relacji 1:1. Gdy
> masz 1:n, nie wiesz która data zostanie podstawiona jako ostatnia, a
> poza tym niepotrzebnie będzie się kilka razy ten sam rekord updajtował.
>

Dzięki serdeczne WSZYSTKIM za pomysły :) Powyższe rozwiązanie jednak
jak dla mnie okazało się najlepszym.

pozdrawiam

Rafał
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?= mysql i mysql-front, problem String line; if (line=="cos"){...}....problem Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?= [postgres] Problem z =?ISO-8859-2?Q?zmian=B1_struktury_i_z?==?ISO-8859-2?Q?ale=BFno=B6ciami=2E?= [oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?= Problem z wartościami w MySQL :( [ MySQL and ASP and VBScript ] [PGSQL] czy ktos mial problemy z initdb pgsql 8.1 ? [MySQL] Problem z zapisem danych w bazie danych Problem z mysql - can't connect to MySQL/nietypowo...
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • adwokat.keep.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com