我想使用多个 OR 值执行完全外连接,但我读过 PostgreSQL 只能在 = 符号每一侧的连接条件不同的情况下进行完全外连接。
在我的场景中,我有 2 个表:ticket 和 production。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
在以下示例中,工单 ID 1 与生产代码 9 和 10 相关。工单 ID 2 与生产代码 8 相关。
我正在尝试编写一个查询以从表 Production 中返回列状态:
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;
因此,我开始将其替换为 CROSS JOIN。查询几乎可以工作,但我面临的行数不同:
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 行。我怎样才能让交叉连接像一个完整的外部一样工作?
我正在使用一个名为 Looker 的工具,这就是我以这种方式构建此查询的原因。