problem z update i join

Użytkowanie programu bazodanowego
attre
Posty: 6
Rejestracja: wt maja 10, 2011 3:26 pm

problem z update i join

Post autor: attre »

Witam,

po wykonaniu kwerendy aktualizującej:

Kod: Zaznacz cały

Update "Dev" SET "Dev"."Lokalizacja"='Klient' from "Dev" inner join "DevHolder" on ( "Dev"."ID"="DevHolder"."IDDev" AND  "DevHolder"."StopDate" IS NULL)
otrzymuje komunikat
Unexpected token FROM in statement from

i o co chodzi ... :?
OpenOffice.org 3.2.1 Mandriva Linux
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: problem z update i join

Post autor: Jan_J »

Narzeka na FROM.

W bazie HSQL (wbudowanej w OOo) -- wg dokumentacji http://hsqldb.org/doc/guide/ch09.html#update-section

Kod: Zaznacz cały

UPDATE table SET column = Expression [, ...] [WHERE Expression];
W innych bazach może obowiązywać nieco inna składnia, ale tak czy inaczej, FROM nie ma tam prawa być.

Nie zapomnij o WHERE, bo zaktualizujesz całą kolumnę.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
attre
Posty: 6
Rejestracja: wt maja 10, 2011 3:26 pm

Re: problem z update i join

Post autor: attre »

No tak ... ale to mi nie rozwiązuje tego że chce działać na 2 tabelach ... a sformułowania

Kod: Zaznacz cały

UPDATE tabela1 , tabela2 SET tabela1.wart='cos' WHERE tabela2.wart2 IS NUL 

Nie przyjmuje - nie chce w ogóle przyjąć dwóch tabel - pisze że spodziewa się SET i tyle :/
Jakoś chciałam to zapomocą inner join zrobić ale coś nie chce działać :(

prosze o pomoc :cry:
OpenOffice.org 3.2.1 Mandriva Linux
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: problem z update i join

Post autor: Jan_J »

W składni jest wyraźnie powiedziane: update odnosi się do jednej tabeli, może być wiele modyfikowanych pól, warunek modyfikacji jest jeden.

W Twojej ostatniej propozycji jest inaczej. W ogóle nie jest jasne nawet na poziomie nieformalnym, które rekordy z tabela1 miałyby być modyfikowane.

Update perspektyw i zapytań to rozszerzenie dostępne w niektórych bazach i przy spełnieniu pewnych dodatkowych warunków. Tak że niestety, jeśli modyfikować dwie tabele, to dwoma żądaniami update. Jeżeli są ze sobą związane, to albo * masz zły projekt logiczny tabel, albo ** powinnnaś użyć transakcji, żeby uniknąć kłopotu, kiedy jedno update się wykona, a drugie nie.

No i NUL is not NULL. Ortografia też jest ważna.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
attre
Posty: 6
Rejestracja: wt maja 10, 2011 3:26 pm

Re: problem z update i join

Post autor: attre »

Ajć, drugi przykład pisałam odręcznie - przepraszam za niedokładność.

Chodziło mi o coś takiego jak w przykłądzie:
http://www.java2s.com/Code/SQL/Join/JOI ... ommand.htm

jest tam:

Kod: Zaznacz cały

UPDATE Authors AS a, AuthorArticle AS ab, Articles AS b
SET AuthorLastName='Wats'
WHERE a.AuthID=ab.AuthID AND ab.ArticleID=b.ArticleID
AND ArticleTitle='AI';
i właśnie o coś takiego mi chodzi tylko dla 2 tabel a nie dla 3.

a chcialam to zrealizować tak za pomocą inner join ...

ale znalazlam juz inne rozwiązanie:

Kod: Zaznacz cały

UPDATE "Dev" SET "Lokalizacja" = 'Klient'
 WHERE EXISTS
 (SELECT *
 FROM "DevHolder"
 WHERE "IDDev" = "Dev"."ID"
 AND "StopDate" IS NULL)
Dzieki za pomoc ... EOT
OpenOffice.org 3.2.1 Mandriva Linux
ODPOWIEDZ