簡體   English   中英

僅當滿足 if 條件時,如何更新表中的列?

[英]How to update the columns in table only when an if condition is satisfied?

我正在嘗試通過查看另一個表來更新表字段。 查找包含 id 字段及其對應的名稱字段。

  • 我想要實現的是基於 A 表和 B 表之間的匹配我想更新 A 表中的名稱字段,名稱(來自 B)前綴到 A 表的名稱字段。 因此,如果 A 表中的名稱是“ABC”,B 中的名稱是“XYZ”。 我想在 A 表的名稱字段中使用 XYZ_ABC。
  • 附加條件是,如果查找表名稱和主表名稱都相同,就像兩個字段都具有值“ABC”,那么它不應該 append 任何前綴,並且名稱應該保持原樣。

下面是我嘗試實現它的代碼,盡管無法添加該條件。 任何人都可以幫助實現同樣的目標嗎? TID 是 ID,SNAME 是表 A 中的名稱,TNAME 是表 B 中的名稱。

UPDATE TABLE_A
SET
    TABLE_A.SNAME = TNAME + '_' + a.SNAME
from TABLE_A a
left join TABLE_B b
    on a.TID = b.TID 
where b.TID in (
    select a.TID
    from TABLE_A a
    left join TABLE_C c on a.TID = c.TID
    where a.PHASE like '%SOMETEXT%'
)  

您的子查詢在TABLE_C上有一個左連接,但它無處使用。 這不是很有效。 我會在我的回答中忽略它。

在 Microsoft SQL 服務器中,您可以在 UPDATE 語句中使用 JOIN。

您只需要更新在 A 和 B 表中都有名稱的記錄,因此您可以使用 INNER JOIN 而不是 LEFT JOIN。

您可能還想在 WHERE 子句中包含一個額外的條件來檢查TABLE_A.SNAME是否包含下划線(這可能意味着它已經被更新)。

UPDATE A
SET SNAME = B.TNAME + '_' + A.SNAME
FROM TABLE_A AS A INNER JOIN TABLE_B AS B ON B.TID = A.TID
WHERE A.PHASE LIKE '%SOMETEXT%' AND A.SNAME <> B.TNAME --AND A.SNAME NOT LIKE '%[_]%';

我還沒有測試過這個查詢。 請仔細測試。

忽略 where 子句的結構,您需要應用的更新只是使用case expression測試是否相等

SET a.SNAME = case when a.SNAME=b.TNAME then a.SNAME else b.TNAME + '_' + a.SNAME end 

原始語句 - 為 TNAME 添加了表別名:

UPDATE TABLE_A
SET TABLE_A.SNAME = b.TNAME + '_' + a.SNAME from TABLE_A a  left join 
TABLE_B b on a.TID = b.TID 
where b.TID in (select a.TID from TABLE_A a left join TABLE_C c on a.TID = c.TID where a.PHASE like '%SOMETEXT%') 

如果我理解正確,這可能會起作用,盡管未經測試:

UPDATE TABLE_A
    SET TABLE_A.SNAME = case when a.sname = b.tname then a.sname else  b.TNAME + '_' + a.SNAME end from TABLE_A a  left join 
    TABLE_B b on a.TID = b.TID 
    where b.TID in (select a.TID from TABLE_A a left join TABLE_C c on a.TID = c.TID where a.PHASE like '%SOMETEXT%') 
UPDATE TABLE_A a
INNER JOIN  TABLE_B b
ON a.TID = b.TID    
SET a.SNAME = 
case when a.SNAME=b.TNAME then a.SNAME else concat(b.TNAME , '_' , a.SNAME) end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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