mise à jour des lignes de tableau dans postgresql à l'aide de sous-requêtes
À l'aide de postgresql 8.4, Mon objectif est de mettre à jour une table existante:
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
);
Au départ, j'ai testé ma requête à l'aide d'instruction 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
étant Débutant je ne suis pas la conversion à l'instruction de mise à jour d'ie., mise à jour des lignes existantes avec les valeurs retournées par l'instruction select.
Toute aide est très appréciée.
- avez-vous une sorte d'id dans la table d'adresses, qui peuvent être utilisés pour déterminer la ligne est existant?
- oui je le fais mais sa sys généré.
Vous devez vous connecter pour publier un commentaire.
Postgres permet:
Cette syntaxe n'est pas du SQL standard, mais il est beaucoup plus pratique pour ce type de requête de SQL standard. Je crois Oracle (au moins) accepte quelque chose de similaire.
ERROR: 42P01: relation "dummy" does not exist
dummy
doit être remplacé par le nom de la table que vous souhaitez mettre à jour. S'il vous plaît comprendre la question et la réponse avant d'essayer de l'appliquer.Vous êtes après la
UPDATE FROM
syntaxe.Références
Si il n'y a pas de gains de performances à l'aide d'une jointure, alors je préfère les Expressions de Table Communes (expressions de table communes) pour des raisons de lisibilité:
À mon humble avis un peu plus moderne.