Можно ли получить строки DISTINCT из предложения RETURNING?

Мы используем PostgreSQL v8.2.3.

Можно ли получить строки DISTINCT из оператора UPDATE, используя предложение RETURNING?

MYTABLE столбцы:

  1. APRIMARYKEYCOLUMN
  2. ABOOLEANCOLUMN
  3. ЭЛ. АДРЕС
  4. COLUMN1
  5. COLUMN2
  6. колонка3

ОБНОВЛЕНИЕ с использованием запроса предложения RETURNING:

UPDATE MYTABLE SET ABOOLEANCOLUMN = true FROM MYTEMPTABLE WHERE EMAIL =
MYTEMPTABLE.EMAIL RETURNING EMAIL, COLUMN1, COLUMN2, COLUMN3;

Здесь в этом случае я ожидаю вернуть отдельные строки из этих столбцов: EMAIL, COLUMN1, COLUMN2, COLUMN3.

Я даже попробовал некоторые способы получения отдельных строк, но это не работает. Хотя я все еще могу решить это на прикладном уровне, я пытаюсь выяснить, можно ли это решить / контролировать на уровне запросов. Любые разные идеи / предложения приветствуются.

2 ответа

Решение

Нет, ты не можешь. RETURNING - это здорово, но это не то же самое, что обычный оператор SELECT. ВОЗВРАТ основан на записи, а не на основе набора. DISTINCT работает на съемочной площадке.

Это старый вопрос, но так как он появился как первый ответ в поиске, и этот ответ устарел, я делюсь им.

Используя обычные табличные выражения (CTE), доступные с PG версии 8.4, вы можете обновить / удалить и получить отличный результат.

WITH updater AS
(
  UPDATE MYTABLE SET ABOOLEANCOLUMN = true FROM MYTEMPTABLE WHERE EMAIL = MYTEMPTABLE.EMAIL RETURNING EMAIL, COLUMN1, COLUMN2, COLUMN3
)
SELECT DISTINCT EMAIL, COLUMN1, COLUMN2, COLUMN3
FROM updater;
Другие вопросы по тегам