sql >> Database >  >> RDS >> PostgreSQL

Hoe voeg ik in een tabel in vanuit een andere tabel door op waarden te matchen?

U kunt extra tabellen samenvoegen in een UPDATE verklaring, rekening houdend met deze voorkeursvorm:

UPDATE books b
SET    author_id = a.author_id
FROM   authors a
WHERE  b.author = a.author_name;

Drie redenen:

  • Het is veiliger. Uw zoekopdracht schrijft een NULL-waarde in elke rij waar geen overeenkomende auteur is gevonden. Dat lijkt in uw geval niet van belang, maar kan mogelijk leiden tot gegevensverlies in vergelijkbare zoekopdrachten waarbij u al gegevens in de te updaten kolom heeft. Mijn alternatief doet niets als er geen overeenkomende auteur wordt gevonden.

  • Het is sneller. Het bovenstaande voor een. Maar ook omdat gecorreleerde subquery's alsof je schaal vreselijk hebt. Deelnemen aan een tabel gaat over het algemeen sneller, vooral met meer dan een paar rijen.

  • Het is schoner en gemakkelijker aan te passen aan extra kolommen.



  1. PostgreSQL FOUT:INSERT heeft meer doelkolommen dan expressies, als dat niet het geval is

  2. Kan een gedistribueerde transactie niet starten

  3. Gegevens uit de SQL-tabel invoegen en transformeren

  4. Hoe vraag ik een mysql-veld aan?