Как присоединиться к ПК с диапазоном - PullRequest
1 голос
/ 06 ноября 2019

У меня есть следующие таблицы:

ТАБЛИЦА A

PK VALUE
----------
01 AA
03 BB
07 CC
19 DD

ТАБЛИЦА B

FROM TO VALUE
------------------
01   04 ZZ
05   10 YY
11   20 XX

Я хотел бы объединить эти две таблицы так, чтобы PKиз таблицы A соответствует диапазону from - to из таблицы B.

Желаемый результат будет:

PK VALUE FROM TO VALUE
----------------------
01 AA    01   04 ZZ
03 BB    01   04 ZZ
07 CC    05   10 YY
19 DD    11   20 XX

Есть предложения?

Спасибо большое !!!

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Вы можете использовать следующее:

SELECT A.PK, A.VALUE, B.[FROM], B.[TO], B.VALUE
FROM A INNER JOIN B ON A.PK BETWEEN B.[FROM] AND B.[TO]

демо на dbfiddle.uk


Вы рассматриваете возможность удаления диапазонови используя точные значения вместо. Сравнение этих двух решений в MSSMS показывает следующее:

enter image description here

Таким образом, ваше текущее решение не настолько неэффективно.

1 голос
/ 06 ноября 2019

Вы можете join с условием between:

select ta.*, tb.*
from tablea ta
inner join tableb tb on ta.pk between tb.from and tb.to

Или использовать явное сравнение:

select ta.*, tb.*
from tablea ta
inner join tableb tb 
    on  ta.pk >= tb.from 
    and ta.pk <= tb.to
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...