我正在寻找一个 PostgreSQL 语句来连接两个数据库,但是简单的连接并不能满足我的要求。给出了两张表:一张是记录烤箱(基于温度和机器状态记录),另一张是记录产品。每个产品都被分配到一个烘箱运行,因此不应发生对一个产品行的双重分配。
烤箱
oven_id | runstart | runend | max_temp
1 | 06.04.2020 19:33 | 06.04.2020 21:03 | 100 A
1 | 06.04.2020 23:28 | 07.04.2020 00:58 | 102 B
1 | 07.04.2020 10:00 | 07.04.2020 11:30 | 98 C
...
产品
oven_id | oven_run | product_ids | preprocessing | postprocessing
1 | 11100 | [1,4,6] | 06.04.2020 12:44 | 06.04.2020 21:29 1
1 | 11101 | [2,3,7] | 06.04.2020 19:24 | 07.04.2020 08:12 2
1 | 11102 | [5,8,9] | 07.04.2020 05:31 | 07.04.2020 19:05 3
...
我的第一种方法:
select *
from oven
left join product
on oven.runstart>product.preprocessing and oven.runend<product.postprocessing and oven.oven_id=product.oven_id
但是,在某些特定情况下(例如上面的示例),此查询未显示所需的结果,因为我得到了四行(为简单起见,在上面的示例中,行标记为 ABC 和 123):A-1,A -2、B-2 和 C-3
https://www.db-fiddle.com/f/dBSGUE1nhvAkiZuGnL2nqs/3
我正在寻找的实际内容是 1:1 分配(每个烤箱运行准确分配给一个产品,没有烤箱运行或产品使用两次),因此每个烤箱行应分配给一个产品行。鉴于上面显示的示例,从逻辑的角度来看,组合 A-2 应该被忽略,否则一个产品将在烤箱中两次(产品 2 必须运行 B,否则运行 B 中没有产品)。
知道如何调整查询以仅接收三行:A-1、B-2、C-3
谢谢你的支持!