下午好,非常感谢您为我解决下一个问题 我有这两个桌子
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 |
+----------+--------------+---------+
致谢!
答案 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;