Я хотел бы выполнить полное внешнее объединение, используя несколько значений ИЛИ, но я прочитал, что PostgreSQL может выполнять полное внешнее объединение только в ситуации, когда условия соединения различны на каждой стороне знака =.
В моем сценарии у меня есть 2 таблицы: билет и производство.Один регистр в Ticket может иметь несколько значений для Production.code.Пример:
TICKET|custom_field_1|custom_field_2|custom_field_3
1| 10 |9 |
2| |8 |
PRODUCTION|CODE
1| 10
5| 8
12| 9
В следующем примере идентификатор билета 1 связан с производственным кодом 9 и 10. А идентификатор билета 2 связан с производственным кодом 8.
Я пытаюсьнаписать запрос для возврата столбца Status из таблицы Производство:
SELECT
production.status
FROM ticket
FULL OUTER JOIN production ON ticket.custom_field_1 = production.code
OR ticket.custom_field_2 = production.code
OR ticket.custom_field_3 = production.code
GROUP BY 1
ORDER BY 1
LIMIT 1000
Когда я пытаюсь выполнить этот запрос, я получаю сообщение об ошибке: Invalid operation: FULL JOIN is only supported with merge-joinable join conditions;
Итак, я начал его заменятьдля перекрестного объединения.Запрос почти работает, но я сталкиваюсь с разным количеством строк:
SELECT count(production.id) FROM ticket
CROSS JOIN production
WHERE date(production.ts_real) >= '2019-03-01' AND
((ticket.custom_field_1 = sisweb_producao.proposta) OR
(ticket.custom_field_2 = sisweb_producao.proposta) OR
(ticket.custom_field_3 = sisweb_producao.proposta));
Этот запрос должен вернуть 202 строки, но из-за моих условий выдаст только 181.Как сделать так, чтобы перекрестное соединение работало как FULL OUTER?
Я использую инструмент под названием Looker, поэтому я строю этот запрос именно таким образом.