如何编写查询以更新具有两个左连接的表.下面是MSSQL中的一个查询,我想把它转换成postgresql.请帮忙.
Update T1 Set
T1.Amount = (T1.Amount - T2.Disc) + ((DT1.N_Amount)/2)
From @Before T1
Left Join @Before T2 On T1.ID = T2.ID
Left Join @DiscTable DT1 On T1.PurchID = DT1.Purch_ID
Run Code Online (Sandbox Code Playgroud)
这在postgres中也是可能的,主要区别在于
请注意,目标表不得出现在
from_list,除非您打算进行自联接(在这种情况下,它必须在其中显示别名from_list).
您的查询已转换:
UPDATE "Before" "T1"
SET "T1"."Amount" = ("T1"."Amount" - "T2"."Disc") + (("DT1"."N_Amount")/2)
FROM "Before" "T2"
LEFT JOIN "DiscTable" "DT1" ON "T1"."PurchID" = "DT1"."Purch_ID"
WHERE "T1"."ID" = "T2"."ID"
Run Code Online (Sandbox Code Playgroud)
但为什么要在这里使用自联?(如果"ID"是主键)我认为你可以更简单地实现你的目标:
UPDATE "Before" "T1"
SET "T1"."Amount" = ("T1"."Amount" - "T1"."Disc") + (("DT1"."N_Amount")/2)
FROM "DiscTable" "DT1"
WHERE "T1"."PurchID" = "DT1"."Purch_ID"
Run Code Online (Sandbox Code Playgroud)
编辑:关于引用:
引用标识符也会使其区分大小写,而不带引号的名称始终折叠为小写.例如,PostgreSQL认为标识符FOO,foo和"foo"是相同的,但是"Foo"和"FOO"与这三个和彼此不同.(在PostgreSQL中将不带引号的名称折叠为小写与SQL标准不兼容,后者表示不带引号的名称应该折叠成大写.因此,根据标准,foo应该等同于"FOO"而不是"foo".如果如果您想编写便携式应用程序,建议您始终引用特定名称或从不引用它.)
| 归档时间: |
|
| 查看次数: |
3657 次 |
| 最近记录: |