Maison > base de données > tutoriel mysql > Comment mettre à jour les lignes PostgreSQL avec les valeurs d'une sous-requête ?

Comment mettre à jour les lignes PostgreSQL avec les valeurs d'une sous-requête ?

DDD
Libérer: 2025-01-04 21:10:40
original
251 Les gens l'ont consulté

How to Update PostgreSQL Rows with Values from a Subquery?

Mise à jour des lignes de table PostgreSQL à l'aide de sous-requêtes

Pour mettre à jour les lignes existantes dans une table PostgreSQL à l'aide des valeurs renvoyées par une sous-requête, vous pouvez utiliser ce qui suit syntaxe :

UPDATE table_name
SET column_name = subquery.column_name
FROM (SELECT ...) AS subquery
WHERE table_name.id = subquery.id;
Copier après la connexion

Considérez l'exemple de table factice que vous fourni :

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
);
Copier après la connexion

Pour mettre à jour les colonnes client, fournisseur et partenaire en fonction des valeurs renvoyées par une instruction select, vous pouvez utiliser la syntaxe suivante :

UPDATE dummy
SET customer = subquery.customer,
    supplier = subquery.supplier,
    partner = subquery.partner
FROM (SELECT address_id,
            CASE WHEN cust.addr1 IS NOT NULL THEN TRUE ELSE FALSE END AS customer,
            CASE WHEN suppl.addr1 IS NOT NULL THEN TRUE ELSE FALSE END AS supplier,
            CASE WHEN partn.addr1 IS NOT NULL THEN TRUE ELSE FALSE END AS partner
      FROM address AS pa
      LEFT OUTER JOIN cust_original AS cust
        ON (pa.addr1 = cust.addr1 AND pa.addr2 = cust.addr2 AND pa.city = cust.city
            AND pa.state = cust.state AND CAST(cust.zip AS VARCHAR(5)) = CAST(pa.zip AS VARCHAR(5)))
      LEFT OUTER JOIN supp_original AS suppl
        ON (pa.addr1 = suppl.addr1 AND pa.addr2 = suppl.addr2 AND pa.city = suppl.city
            AND pa.state = suppl.state AND CAST(pa.zip AS VARCHAR(5)) = CAST(CAST(suppl.zip AS VARCHAR(25)) AS VARCHAR(5)))
      LEFT OUTER JOIN partner_original AS partn
        ON (pa.addr1 = partn.addr1 AND pa.addr2 = partn.addr2 AND pa.city = partn.city
            AND pa.state = partn.state AND CAST(pa.zip AS VARCHAR(5)) = CAST(CAST(partn.zip AS VARCHAR(25)) AS VARCHAR(5)))) AS subquery
WHERE dummy.address_id = subquery.address_id;
Copier après la connexion

Cette requête effectue la opérations suivantes :

  • Sélectionne les valeurs client, fournisseur et partenaire pour chaque ligne de la table factice à partir d'une sous-requête qui joint la table factice avec le tables cust_original, supp_original et Partner_original.
  • Définit les colonnes client, fournisseur et partenaire de la table factice avec les valeurs renvoyées par la sous-requête.
  • Mise à jour uniquement les lignes de la table factice qui avoir un adresse_id correspondant dans la sous-requête.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal