sql >> Database >  >> RDS >> PostgreSQL

Hoe verhoudt de FROM-kant van een UPDATE zich tot de tabel die is bedoeld voor UPDATE?

De UPDATE zoekopdracht die u weergeeft is precies hetzelfde als:

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

subject ILIKE '%tester%' is een sneller equivalent voor subject ~ 'tester' . Details voor LIKE , ILIKE en reguliere expressie-overeenkomst (~ ) in de handleiding of in dit gerelateerde antwoord op dba.SE:

En effectief hetzelfde als:

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

Gebruik dit in plaats daarvan.

Als er meerdere rijen in tabel moeten staan ​​email met hetzelfde fromemailaddress overeenkomend met een rij in fromemailaddress , dan voert dit formulier slechts één uit update per rij, in tegenstelling tot je ongelukkige origineel.

Laat u niet verwarren door het feit dat fromemailaddress wordt hier gebruikt als kolom en als tabelnaam.

Lees de handleiding zorgvuldig hier en hier . In het bijzonder dit stukje:



  1. laravel welsprekend sorteren op relatie

  2. Jaren aftrekken van een datum in SQLite

  3. mysql - zoek tussen datums waar alle datums verschijnen

  4. Sorteer resultaten zodat ze overeenkomen met de volgorde van waarden in een WHERE IN-expressie