Używając postgres 8.4, moim celem jest aktualizacja istniejącej tabeli:
CREATE TABLE public.dummy
(
address_id SERIAL,
addr1 character(40),
addr2 character(40),
city character(25),
state character(2),
zip character(5),
customer boolean,
supplier boolean,
partner boolean
)
WITH (
OIDS=FALSE
);
Początkowo przetestowałem moje zapytanie przy użyciu instrukcji insert:
insert into address customer,supplier,partner
SELECT
case when cust.addr1 is not null then TRUE else FALSE end customer,
case when suppl.addr1 is not null then TRUE else FALSE end supplier,
case when partn.addr1 is not null then TRUE else FALSE end partner
from (
SELECT *
from address) pa
left outer join cust_original cust
on (pa.addr1=cust.addr1 and pa.addr2=cust.addr2 and pa.city=cust.city
and pa.state=cust.state and substring(cust.zip,1,5) = pa.zip )
left outer join supp_original suppl
on (pa.addr1=suppl.addr1 and pa.addr2=suppl.addr2 and pa.city=suppl.city
and pa.state=suppl.state and pa.zip = substring(suppl.zip,1,5))
left outer join partner_original partn
on (pa.addr1=partn.addr1 and pa.addr2=partn.addr2 and pa.city=partn.city
and pa.state=partn.state and pa.zip = substring(partn.zip,1,5) )
where pa.address_id = address_id
będąc nowicjuszem nie powiodło mi się przekształcenie instrukcji update, tj. aktualizacja istniejących wierszy o wartości zwrócone przez instrukcję select Każda pomoc jest bardzo ceniona.
sql
postgresql
subquery
sql-update
nakładanie
źródło
źródło
Odpowiedzi:
Postgres pozwala:
Ta składnia nie jest standardowym SQL, ale jest znacznie wygodniejsza dla tego typu zapytań niż standardowy SQL. Wierzę, że Oracle (przynajmniej) akceptuje coś podobnego.
źródło
ERROR: 42P01: relation "dummy" does not exist
dummy
musi zostać zastąpiony nazwą tabeli, którą próbujesz zaktualizować. Proszę zrozumieć pytanie i odpowiedź przed próbą złożenia wniosku.Poszukujesz
UPDATE FROM
składni.Bibliografia
źródło
Jeśli nie ma wzrostu wydajności przy użyciu sprzężenia, wolę wspólne wyrażenia tabelowe (CTE) dla czytelności:
IMHO jest trochę bardziej nowoczesny.
źródło
Istnieje wiele sposobów aktualizowania wierszy.
Jeśli chodzi o
UPDATE
wiersze za pomocą podkwerend, możesz użyć dowolnego z tych podejść.Podejście-4 [Korzystanie z instrukcji WITH]
Mam nadzieję, że byłoby to pomocne
źródło
źródło
@Mayur „4.2 [Używanie zapytania ze złożonym JOIN]” z Common Table Expressions (CTE) załatwiło sprawę .
Mam nadzieję, że to pomaga ...: D
źródło