Пока петля на 100 номеров

Я хотел бы создать цикл SQL, где можно извлекать тысячи полей на основе 12-значных чисел и в пределах диапазона двух столбцов. например,

Если у меня есть 3 столбца в таблице

MasterKeyNumber---BB000Q000000
StartingNumber BB0000000001
EndingNumber - BB000Q00000022

Я хотел бы создать цикл while, который будет извлекать все числа из начального и конечного числа и внутри него и который покажет, который также покажет номер MasterKey

Например,

MasterKeyNumber---BB000Q000000
StartingNumber BB0000000001
StartingNumber BB0000000002
StartingNumber BB0000000003
StartingNumber BB0000000004
StartingNumber BB0000000005
StartingNumber BB0000000006
StartingNumber BB0000000007
StartingNumber BB0000000008
StartingNumber BB0000000009
StartingNumber BB0000000010
StartingNumber BB0000000011
StartingNumber BB0000000012
StartingNumber BB0000000013
StartingNumber BB0000000014
StartingNumber BB0000000015
StartingNumber BB0000000016
StartingNumber BB0000000017
StartingNumber BB0000000018
StartingNumber BB0000000019
StartingNumber BB0000000020
StartingNumber BB0000000021
StartingNumber BB0000000022

EndingNumber - BB000Q00000022

Я могу получить только один или два диапазона, используя такие выражения, как "Между" и "И", но если у меня есть диапазоны, которые показывают несколько разных чисел и несколько разных диапазонов, как мне это сделать?

Например, мой запрос на вытягивание одного диапазона за раз

Select MasterKey, StartingNumber, EndingNumber, from TabelName
where StartingNumber Between 'BB0000000001' AND 'BB0000000022'

Который дает только этот диапазон, но у меня есть тысячи различных номеров, которые будут иметь несколько диапазонов, таких как BB0000000004 до BB00000000010, BB0000000045 до BB0000000066, BB0000000088 до BB0000000099

Каким должен быть мой запрос цикла while, чтобы получить все диапазоны?

Заранее спасибо

1 ответ

Вы окажетесь в тупике, если будете думать о SQL-запросах в форме циклов и тому подобного. Вместо этого думайте в наборах данных и их связи друг с другом.

Подумайте о получении всех диапазонов, которые вы хотите вернуть:

SELECT masterkey, startingnumber, endingnumber FROM tablename;

Теперь у нас есть все начальные и конечные номера, которые мы хотим запросить. Теперь мы хотим получить все начальные номера, которые появляются в этом диапазоне, и это masterkey. Так:

SELECT
    tablename.masterkey,
    tablename.startingnumber,
    myRanges.startingNumber,
    myRanges.endingNumber
FROM
    (SELECT masterkey, startingnumber, endingnumber FROM tablename) myRanges
    INNER JOIN tablename ON
        tablename.startingnumber BETWEEN myRanges.StartingNumber and myranges.EndingNumber

Здесь использовали этот начальный запрос, чтобы задать начальный и конечный диапазон для повторного запроса к таблице. Мы возвращаем masterkey startingnumber что вы заинтересованы, а затем startingnumber а также endingnumber что заставило нас потянуть этот конкретный startingnumber,

Другие вопросы по тегам