Можно ли получить строки DISTINCT из предложения RETURNING?
Мы используем PostgreSQL v8.2.3.
Можно ли получить строки DISTINCT из оператора UPDATE, используя предложение RETURNING?
MYTABLE столбцы:
- APRIMARYKEYCOLUMN
- ABOOLEANCOLUMN
- ЭЛ. АДРЕС
- COLUMN1
- COLUMN2
- колонка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;