[英]update with left join in postgresql
如何編寫查詢以更新具有兩個左連接的表。 下面是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
這在postgres中也是可能的, 主要區別在於
請注意,目標表不得出現在
from_list
,除非您打算進行自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"
但為什么要在這里使用自聯? (如果"ID"
是主鍵)我認為你可以更簡單地實現你的目標:
UPDATE "Before" "T1"
SET "T1"."Amount" = ("T1"."Amount" - "T1"."Disc") + (("DT1"."N_Amount")/2)
FROM "DiscTable" "DT1"
WHERE "T1"."PurchID" = "DT1"."Purch_ID"
編輯 : 關於引用 :
引用標識符也會使其區分大小寫,而不帶引號的名稱始終折疊為小寫。 例如,PostgreSQL認為標識符FOO,foo和“foo”是相同的,但是“Foo”和“FOO”與這三個和彼此不同。 (在PostgreSQL中將不帶引號的名稱折疊為小寫與SQL標准不兼容,后者表示不帶引號的名稱應折疊成大寫。因此,根據標准,foo應相當於“FOO”而不是“foo”。如果如果您想編寫便攜式應用程序,建議您始終引用特定名稱或從不引用它。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.