sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur förhåller sig FRÅN-sidan av en UPPDATERING till tabellen som är inriktad på UPPDATERING?

UPDATE fråga du visar är exakt densamma 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%' är en snabbare motsvarighet för subject ~ 'tester' . Detaljer för LIKE , ILIKE och matchning av reguljära uttryck (~ ) i manualen eller i detta relaterade svar på dba.SE:

Och effektivt samma som:

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

Använd detta istället.

Om det ska finnas flera rader i tabellen email med samma fromemailaddress matchar en rad i fromemailaddress , då kör detta formulär bara ett uppdatering per rad, till skillnad från ditt olyckliga original.

Bli inte förvirrad av det faktum att fromemailaddress används som kolumn och som tabellnamn här.

Läs manualen noggrant här och här . I synnerhet denna bit:



  1. php-formulär:kan inte uppdatera databasen, fråga med multiple join

  2. Hur man infogar DECIMAL i MySQL-databasen

  3. Återställ MySQL-databas med endast .frm- och .ibd-filer

  4. skapa databas med pdo i php