sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan relaterer FRA-siden af ​​en OPDATERING til tabellen, der er målrettet for OPDATERING?

UPDATE forespørgslen, du viser, er nøjagtig den samme som:

UPDATE fromemailaddress f
SET    call = true 
FROM  (
   SELECT fromemailaddress
   FROM   email 
   WHERE  subject ILIKE '%tester%'
   ) e
WHERE  e.fromemailaddress = f.fromemailaddress;

subject ILIKE '%tester%' er en hurtigere ækvivalent for subject ~ 'tester' . Detaljer for LIKE , ILIKE og matchning af regulære udtryk (~ ) i manualen eller i dette relaterede svar på dba.SE:

Og effektivt det samme som:

UPDATE fromemailaddress f
SET    call = true
WHERE  EXISTS (
   SELECT 1
   FROM   email e
   WHERE  e.fromemailaddress = f.fromemailaddress
   AND    e.subject ILIKE '%tester%'
   );

Brug dette i stedet.

Hvis der skulle være flere rækker i tabellen email med den samme fromemailaddress matcher en række i fromemailaddress , så udfører denne formular kun én opdatering pr. række i modsætning til din uheldige original.

Bliv ikke forvirret af det faktum, at fromemailaddress bruges som kolonne og som tabelnavn her.

Læs manualen omhyggeligt her og her . Især denne bit:



  1. Sådan finder du maksimale værdier i rækker

  2. Indlæser KML-fil til mysql / xpath og x quires

  3. SQL-sætning til at forbinde og give resultat i flere kolonner

  4. Når du bruger NetBeans til at fejlsøge PHP-script for at ændre tabelposter, ændres 'affected_rows' fra 1 til -1