Sql server 2008 SQL 2008中的T-SQL

Sql server 2008 SQL 2008中的T-SQL,sql-server-2008,Sql Server 2008,我试图在sql 2008中获得以下内容 我的逻辑是: 表1是源表 如果将(域、公司和国家)与表2匹配->将更新价格 否则 如果将(域)与表3匹配->将更新价格 否则,如果将(域)与表2->匹配,将更新价格 否则,如果将(公司和国家)与表2->匹配,将更新价格 如果符合上述条件之一,将更新源表中的价格 如何循环源表? 源表中可能有很多记录 提前谢谢。像这样的东西应该可以做到,我想: UPDATE T1 SET Price = CASE WHEN T2.Id IS NOT NULL THE

我试图在sql 2008中获得以下内容

我的逻辑是:

表1是源表

如果将(域、公司和国家)与表2匹配->将更新价格

否则

如果将(域)与表3匹配->将更新价格

否则,如果将(域)与表2->匹配,将更新价格

否则,如果将(公司和国家)与表2->匹配,将更新价格

如果符合上述条件之一,将更新源表中的价格

如何循环源表? 源表中可能有很多记录


提前谢谢。

像这样的东西应该可以做到,我想:

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

对不起,我没有费心写或测试代码,但是如果上面的解决方案给了你正确的结果,你应该考虑在相同的条件下添加WHERE子句测试。这样,您就不会更新原始值不会改变的行


没有必要循环。更新将应用于T1中未被联接或WHERE子句过滤掉的每一行。

听起来不应该循环。尝试将您的查询构建为基于“匹配项”使用CASE或类似于join的select查询。然后,构建select之后,将select更改为更新。