更新表列,用于根据第二个表上的字母顺序进行排序

时间:2017-08-24 14:51:54

标签: sql postgresql

所以我有两个表(A和B),它们的关系是n-n。

因此,有第三个表(C)用于连接两个表。

表A和B都有Id和名称。

表C有IDA,IDB和Order,用于排序和用户给出的数字。

我的问题是我需要迁移表C,因为我刚刚添加了订单列,所以我需要根据B名称给每一行一个订购号。

所以如果表A有:

Id Name
1  J
2  L
3  M

表B有:

IdA  IdB  Order
1    2    0
1    1    0
1    3    0
2    1    0
2    3    0

表C有:

IdA  IdB  Order
1    2    2
1    1    1
1    3    3
2    1    1
2    3    2

我需要一个更新表C的查询更像:

IdA  IdB  Order
1    2    2
1    1    1
1    3    3
2    1    1
2    3    3

我有一个基本上可以做我想要的查询,但它留下了"空白" 阅读上面的结果我得到:

void Update() {
    if (Input.GetMouseButtonDown(0)) {
        Debug.Log("Pressed left click, casting ray.");
        CastRay();
    }
}

void CastRay() {
   Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
   RaycastHit hit;
   if (Physics.Raycast(ray, out hit, 100)) {
       Debug.DrawLine(ray.origin, hit.point);
   }
}

1 个答案:

答案 0 :(得分:0)

我认为这应该适用于你需要的东西:

With ToUpdate As
(
    Select  C.*,
            Row_Number() Over (Partition By C.IdA Order By B.Name) As NewOrder
    From    C
    Join    B   On  B.Id = C.IdB
)
Update  C
Set     "Order" = U.NewOrder
From    ToUpdate    U
Where   U.IdA = C.IdA 
And     U.IdB = C.IdB

(完全披露,我对postgres并不十分熟悉,但我认为这应该是有效的。)