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

Връща данни от подизбор, използван в INSERT в израз на обща таблица

Трябва да уточните имената и псевдонимите на вашите таблици. Освен това връзката между двете таблици е колоната image (data в новата таблица file_data ):

WITH inserted AS (
  INSERT INTO file_data (data)
  SELECT image
  FROM   task_log
  WHERE  image IS NOT NULL
  RETURNING id, data  -- can only reference target row
)
UPDATE task_log t
SET    attachment_id = i.id
     , attachment_type = 'INLINE_IMAGE'
FROM   inserted i
WHERE  t.image = i.data;

Както е обяснено в стария ми отговор, който споменахте, image трябва да е уникален в task_log за да работи това:

Добавих техника как да разграничавам неуникалните стойности в посочения отговор. Не съм сигурен дали искате дублирани изображения в file_data , обаче.

В RETURNING клауза на INSERT можете да препращате само към колони от вмъкнатия ред. Ръководството:

Удебелен акцент е мой.

Сгъване на дублиращи се изходни стойности

Ако искате отделни записи в целевата таблица на INSERT (task_log ), всичко, от което се нуждаете в този случай, е DISTINCT в началния SELECT :

WITH inserted AS (
  INSERT INTO file_data (data)
  SELECT DISTINCT image  -- fold duplicates
  FROM   task_log
  WHERE  image IS NOT NULL
  RETURNING id, data  -- can only reference target row
)
UPDATE task_log t
SET    attachment_id = i.id
     , attachment_type = 'INLINE_IMAGE'
FROM   inserted i
WHERE  t.image = i.data;

Полученият file_data.id се използва многократно в task_log . Имайте предвид, че множество редове в task_log сега посочете същото изображение във file_data . Внимавайте с актуализациите и изтриванията...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Обработка на EXCEPTION и връщане на резултат от функцията

  2. Защо резултатът от COUNT се удвоява, когато се присъединя към две?

  3. ГРЕШКА:операторът не съществува:числово ~* неизвестно

  4. Изчисляване на проценти със заявка GROUP BY

  5. Rails:Няма пул за връзки за ActiveRecord::Base