下午好,我将非常感谢您对我的下一个问题的帮助 我有这两张桌子
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
字段,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 |
+----------+--------------+---------+
问候!
使用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;