我想在sql 2008中获得以下内容。
这是我的逻辑:
表1是源表。
IF匹配(域名和公司和国家/地区)与表2 - >将更新价格
否则
如果匹配(域)与表3 - >将更新价格
否则如果匹配(域)与表2 - >将更新价格
否则如果匹配(公司和国家)与表2 - >将更新价格
如果符合上述条件之一,将更新源表中的价格。
我应该如何循环源表? 源表中可能有很多记录。
提前致谢。
答案 0 :(得分:1)
我认为应该这样做:
UPDATE T1
SET Price = CASE
WHEN T2.Id IS NOT NULL THEN T2.Price
WHEN T3.Id IS NOT NULL THEN T3.Price
WHEN T22.Id IS NOT NULL THEN T22.Price
ELSE T1.Price END
FROM [Table 1] T1
LEFT
JOIN [Table 2] T2
ON T1.Company = T2.Company
AND T1.Country = T2.Country
AND SUBSTRING(T1.Email, CHARINDEX('@', T1.Email) + 1, LEN(T1.Email)) = T2.Domain
LEFT
JOIN [Table 3] T3
ON SUBSTRING(T1.Email, CHARINDEX('@', T1.Email) + 1, LEN(T1.Email)) = T3.Domain
LEFT
JOIN [Table 2] T22
ON T1.Company = T2.Company
AND T1.Country = T2.Country
答案 1 :(得分:-1)
对不起,我没有费心去编写或测试代码,但如果上面的解决方案给出了正确的结果,你应该考虑为相同的条件添加一个WHERE子句测试。这样你就不会做更新原始值不会改变的行的工作。
无需循环。 UPDATE将应用于未通过JOINS或WHERE子句过滤掉的T1中的每一行。