簡體   English   中英

在postgresql中使用左連接進行更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM