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



下午好,我将非常感谢您对我的下一个问题的帮助 我有这两张桌子

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    |
+---------+--------------+--------------+--------+

合作伙伴表

+----------+--------------+---------+
| PCOUNTRY | PPostal Code | PCODECP |
+----------+--------------+---------+
| BR       | 30000-000    |         |
| MX       | 25233        |         |
| BR       | 32475-001    |         |
| MX       | 25431        |         |
| MX       | 32650-023    |         |
+----------+--------------+---------+

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

结果

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

问候!

使用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;

最新更新