Как успешно UNION ALL для двойной точности в PostgreSQL? - PullRequest
0 голосов
/ 16 ноября 2018

Я сталкиваюсь с действительно странной проблемой.

Этот запрос не работает:

SELECT
       t1.status :: TEXT,
       t1.total_amount :: float AS amount

FROM accounting.payment_in_records AS t1
UNION ALL
SELECT
       t1.fees :: float          AS amount,
       'Processed' :: TEXT       AS status
FROM accounting.payment_out_record_detail_groups AS t1
WHERE t1.fees > 0;

Ошибка:

[42804] ERROR: UNION types text and double precision cannot be matched Position: 147

Но этот запрос работает:

SELECT
       t1.total_amount :: float AS amount,
       t1.status :: TEXT
FROM accounting.payment_in_records AS t1
UNION ALL
SELECT
       t1.fees :: float          AS amount,
       'Processed' :: TEXT       AS status
FROM accounting.payment_out_record_detail_groups AS t1
WHERE t1.fees > 0;

То есть порядок столбцов должен быть одинаковым?

1 Ответ

0 голосов
/ 16 ноября 2018

Да, порядок должен быть таким же.Решающим фактором является не столбец псевдоним , а столбец position .

См. документацию для получения подробной информации о «* 1009».* совместимые типы данных ».

Документация содержит

Алгоритм разрешения применяется отдельно к каждому выходному столбцу запроса объединения.

Сбойсделать явным, что столбец идентифицируется по его позиции.

...