sql >> Databáze >  >> RDS >> PostgreSQL

Jak souvisí strana FROM UPDATE s tabulkou, na kterou je UPDATE zaměřena?

UPDATE dotaz, který zobrazíte, je přesně stejný jako:

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

subject ILIKE '%tester%' je rychlejší ekvivalent pro subject ~ 'tester' . Podrobnosti pro ILIKE , ILIKE a shoda regulárních výrazů (~ ) v příručce nebo v této související odpovědi na dba.SE:

A to efektivně stejně jako:

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

Použijte místo toho toto.

Pokud má tabulka obsahovat více řádků email se stejnou fromemailaddress odpovídající řádku v fromemailaddress , pak tento formulář provede pouze jeden aktualizace na řádek, na rozdíl od vašeho nešťastného originálu.

Nenechte se zmást tím, že fromemailaddress se zde používá jako název sloupce a tabulky.

Přečtěte si pozorně příručku zde a zde . Konkrétně tento bit:



  1. Jak získat čas z db v závislosti na podmínkách

  2. Nejlepší způsob ukládání do mezipaměti PHP

  3. Dotaz s parametry IN oddělenými čárkami v PLSQL

  4. Číslo z bind_result porušuje pole php