更新在范围之间的其他表中查找值的字段

时间:2018-10-09 00:33:48

标签: sql sql-server tsql sql-update

下午好,非常感谢您为我解决下一个问题 我有这两个桌子

CP表

+---------+--------------+--------------+--------+
| COUNTRY | Postal Code1 | Postal Code2 | CODECP |
+---------+--------------+--------------+--------+
| BR      | 30000-000    | 32469-999    | BR1    |
| BR      | 32470-000    | 32499-999    | BR2    |
| BR      | 32600-000    | 32699-999    | BR3    |
| MX      | 25000        | 25399        | MX1    |
| MX      | 25400        | 25419        | MX2    |
| MX      | 25420        | 25469        | MX3    |
+---------+--------------+--------------+--------+

PARTNERS TABLE

+----------+--------------+---------+
| PCOUNTRY | PPostal Code | PCODECP |
+----------+--------------+---------+
| BR       | 30000-000    |         |
| MX       | 25233        |         |
| BR       | 32475-001    |         |
| MX       | 25431        |         |
| MX       | 32650-023    |         |
+----------+--------------+---------+
我想要做的

是用 CP表PCODECP合作伙伴表中的字段Country更新PContry是我的关系,PPostal代码是我需要在相应范围内查找的值,PCODECP是我需要用他的正确代码更新的字段,这里应该是什么结果

结果

+----------+--------------+---------+
| PCOUNTRY | PPostal Code | PCODECP |
+----------+--------------+---------+
| BR       | 30000-000    | BR1     |
| MX       | 25233        | MX1     |
| BR       | 32475-001    | BR2     |
| MX       | 25431        | MX3     |
| MX       | 32650-023    | BR3     |
+----------+--------------+---------+

致谢!

1 个答案:

答案 0 :(得分:0)

使用join

select p.*, cp.codecp
from partners p left join
     cp
     on p.country = cp.country and
        p.postal_code >= cp.postal_code1 and
        p.postal_code <= cp.postal_code2;

这使用left join,因此即使没有匹配项,也将所有行保留在第一张表中。

大概您正在使用SQL Server,因此update如下所示:

update p
    set p.codecp = cp.codecp
from partners p join
     cp
     on p.country = cp.country and
        p.postal_code >= cp.postal_code1 and
        p.postal_code <= cp.postal_code2;