PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как страната FROM на UPDATE се отнася към таблицата, насочена към UPDATE?

UPDATE заявката, която показвате, е точно същата като:

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

subject ILIKE '%tester%' е по-бърз еквивалент на subject ~ 'tester' . Подробности за LIKE , ILIKE и съвпадение на регулярен израз (~ ) в ръководството или в този свързан отговор на dba.SE:

Иефективно същото като:

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

Използвайте това вместо това.

Ако трябва да има няколко реда в таблицата email със същия fromemailaddress съвпадение на ред в fromemailaddress , тогава този формуляр изпълнява само един актуализиране на ред, за разлика от вашия злополучен оригинал.

Не се бъркайте от факта, че fromemailaddress се използва като колона и като име на таблица тук.

Прочетете внимателно ръководството тук и тук . По-специално този бит:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Странен проблем със закръгляването

  2. Мониторинг на PostgreSQL в хибридна среда

  3. „Твърде много връзки“, създадени в postgres при създаване на табло за управление в Pentaho

  4. Грешка при неуспешно удостоверяване на паролата при стартиране на миграцията на laravel

  5. Нулевата стойност не е уникална