Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Программирование Новый топик    Ответить
 работа с диапазонами  [new]
warkdimka
Member

Откуда:
Сообщений: 17
Есть диапазон чисел д1 - задается вручную, и диапазон в бд - д2 (mssql) уже заполненный, как можно запросом сравнить их и получить значения, которые есть в д1, но нет в д2. пример д1(1,2,3,4,5) д2(2,3) вывести 1,4,5
просто сравнивать значения из д1 с д2 по одному очень долго, так как в д1 и д2 могут содержать большие значения
5 дек 18, 11:20    [21754048]     Ответить | Цитировать Сообщить модератору
 Re: работа с диапазонами  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 637
warkdimka,

пример к диапазонам как-то мало подходит. Сравнивать надо строки? Или что? Или начнём с нуля. Как в БД храниться эта информация?
5 дек 18, 12:00    [21754104]     Ответить | Цитировать Сообщить модератору
 Re: работа с диапазонами  [new]
Gennadiy Usov
Member

Откуда:
Сообщений: 1462
warkdimka
Есть диапазон чисел д1 - задается вручную, и диапазон в бд - д2 (mssql) уже заполненный, как можно запросом сравнить их и получить значения, которые есть в д1, но нет в д2. пример д1(1,2,3,4,5) д2(2,3) вывести 1,4,5
просто сравнивать значения из д1 с д2 по одному очень долго, так как в д1 и д2 могут содержать большие значения
Вариант 1. Если информация в каждом массиве ранжирована, т.е. от 1 до М, то надо постепенно, переходя одновременно в каждом массиве от 1 до М, сравнивать числа.

И не надо будет сравнивать первые числа одного массива с последними числами другого массива.

Вариант 2. Самый простой. Создать два, ну очень больших массива, в которые необходимо занести одни 0.
Далее необходимо все числа заносить в эти массивы по номеру этого числа.
Далее необходимо перебрать все элементы этих двух массивов и определить элементы массива, где 0.
И вот где в одном массиве 0, а в другом число, то это и есть наш случай!
5 дек 18, 12:44    [21754227]     Ответить | Цитировать Сообщить модератору
 Re: работа с диапазонами  [new]
Gennadiy Usov
Member

Откуда:
Сообщений: 1462
И для варианта 2: необходимо при заполнении двух массивов фиксировать максимальный элемент заполнения, т.е. это будет N, чтобы при сравнении не "гулять" по всему массиву.
5 дек 18, 13:22    [21754289]     Ответить | Цитировать Сообщить модератору
 Re: работа с диапазонами  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 637
Gennadiy Usov,

Какой массив, если это БД MS SQL? Предлагаете в BLOB хранить? Не расточительно ли?
5 дек 18, 14:17    [21754378]     Ответить | Цитировать Сообщить модератору
 Re: работа с диапазонами  [new]
Dima T
Member

Откуда:
Сообщений: 13634
warkdimka
Есть диапазон чисел д1 - задается вручную, и диапазон в бд - д2 (mssql) уже заполненный, как можно запросом сравнить их и получить значения, которые есть в д1, но нет в д2. пример д1(1,2,3,4,5) д2(2,3) вывести 1,4,5
просто сравнивать значения из д1 с д2 по одному очень долго, так как в д1 и д2 могут содержать большие значения

Select value from D1 where value not in (select value from D2 where value is not null)

в D2 должен быть индекс по value
5 дек 18, 14:23    [21754394]     Ответить | Цитировать Сообщить модератору
 Re: работа с диапазонами  [new]
warkdimka
Member

Откуда:
Сообщений: 17
спасибо всем, кто откликнулся.
вариант Select value from D1 where value not in (select value from D2 where value is not null) как писал Dima T подошел, чет я не подумал про not in(
6 дек 18, 11:41    [21755572]     Ответить | Цитировать Сообщить модератору
 Re: работа с диапазонами  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47394
warkdimka
вариант Select value from D1 where value not in (select value from D2 where value is not null) как писал Dima T подошел

Вот только он работает не с диапазонами, а с множествами, но преобразовывать диапазон в множество Вы сами запретили постановкой задачи
warkdimka
в д1 и д2 могут содержать большие значения

Испытайте его на диапазонах 1-10000000 и 200000000-10000000000.
6 дек 18, 14:56    [21755881]     Ответить | Цитировать Сообщить модератору
 Re: работа с диапазонами  [new]
Dima T
Member

Откуда:
Сообщений: 13634
Dimitry Sibiryakov
warkdimka
вариант Select value from D1 where value not in (select value from D2 where value is not null) как писал Dima T подошел

Вот только он работает не с диапазонами, а с множествами, но преобразовывать диапазон в множество Вы сами запретили постановкой задачи

Не, просто хрустальный шар протирай иногда, он же написал
warkdimka
пример д1(1,2,3,4,5) д2(2,3) вывести 1,4,5

Не надо требовать знаний терминологии от начинающих, главное чтобы пример привел.
6 дек 18, 19:40    [21756303]     Ответить | Цитировать Сообщить модератору
 Re: работа с диапазонами  [new]
mayton
Member

Откуда: loopback
Сообщений: 40512
warkdimka,

Терминология очень важна. Если ты ставишь задачу то будь придирчив к своим словам.

Любое лишне слово или иносказательное может вкорне поменять смысл.

Никакие это не диапазоны. Это множества.

Но отвечающим пришлось поднапрячся сильнее чтоб понять это.

Не делай так. Уважай их время.
17 дек 18, 10:25    [21765686]     Ответить | Цитировать Сообщить модератору
Все форумы / Программирование Ответить