Обновить поле поиска значения в другой таблице между диапазонами - PullRequest
0 голосов
/ 09 октября 2018

Добрый день, я буду очень признателен за вашу помощь в моей следующей задаче. У меня есть эти две таблицы

CP TABLE

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

, который я хочу сделать, это обновить поле PCODECP в Таблица партнеров со значениями, которые находятся в Таблица CP , 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 голосов
/ 09 октября 2018

Используйте 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...