我有一张table,上面放着一堆零件。这些部件具有制造商提供的ID和序列号。部件被放在一起以构建组件,并且部件被组装的顺序很重要。当进行此装配时,将创建一个新零件,该零件将进入一个新表,该表具有一个数组,该数组指向具有有序id的第一个表。换句话说:
表“工艺.部件”:
| id|序列号|
| - -----|- -----|
| 一个|PART_A01|
| 2| PART_A02|
| 3| PART_A03|
| 4| PART_A04|
| 5个|PART_A05|
| 六|PART_A06|
表“process.assemblies”:
| id|装配顺序|
| - -----|- -----|
| 一个|{3,6,1}|
| 2| {5,2,4}|
我需要从表2中选择一个组件,并按组件顺序显示它。换句话说,组件1的选择应显示:
| 输出|
| - -----|
| PART_A03|
| PART_A06|
| PART_A01|
我用来选择部件的SQL命令如下所示:
SELECT id, serial_no
FROM process.parts
WHERE id IN (SELECT unnest(assembly_order) FROM process.assemblies WHERE id = 1);
此脚本不保留数组的顺序。有没有一种方法可以修改它来循环遍历数组的元素以保持顺序?
2条答案
按热度按时间fhity93d1#
根据您当前拥有的架构,您可以:
为了保持数组元素的顺序不变,您可以使用
WITH ORDINALITY
子句,它允许您检索非嵌套数组旁边的索引。如果你想要所有的id,你可以在步骤1中使用整个表,而不是选择它。
输出:
| 序列号|
| - -----|
| PART_A03|
| PART_A06|
| PART_A01|
查看演示here。
anauzrmj2#
我相信你现在不想听到这个,但这不是组织这些数据的正确方法。应该有一个
parts
表、一个assembly
表和一个链接两者的assembly_order
表,每行一个步骤。比如:工艺装配订单
| 部分|梯级|装配|
| - -----|- -----|- -----|
| 一个|一个|3|
| 一个|2|六|
| 一个|3|一个|
| 2|一个|5个|
| 2| 2| 2|
| 2| 3| 4|
现在你可以