[英]How to select records from a table when a condition of another table is satisfied
[英]How to update the columns in table only when an if condition is satisfied?
我正在嘗試通過查看另一個表來更新表字段。 查找包含 id 字段及其對應的名稱字段。
下面是我嘗試實現它的代碼,盡管無法添加該條件。 任何人都可以幫助實現同樣的目標嗎? 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.