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

Откуда:
Сообщений: 76
Есть таблица test
id_m id_v
1 1
1 2
2 1
2 3
3 1
3 2
4 5
4 6

Каким образом создать запрос, чтобы определить id_m с условием что оба id_v соответствуют. Ну типа
select a.id_m from test a, test b where a.id_m =b.id_m and a.id_v=1 and b.id_v=2

Запрос даст результат
1
3

Но такой запрос мне не нужен, потому как количество проверяемых id_v динамическое, и неизвестно и не хочется создавать кучу таблиц в select
Еще как вариант
with table test2
(SELECT id_m,count(*) as cnt where id_v=1 or id_v = 2 group by id_m)
SELECT id_m from test2 where cnt=2

Так лучше.
Но обращаюсь за тем, что может кто-то подскажэет более изящное решение.
28 ноя 16, 08:55    [19941293]     Ответить | Цитировать Сообщить модератору
 Re: Запрос для проверкы нескольких строк сразу  [new]
aleks2
Guest
В тему призываются телепяты!

ЗЫ. Если ты объяснишь хотя бы себе: чаво ты хочешь - усе проблемы рассеются.
28 ноя 16, 09:10    [19941322]     Ответить | Цитировать Сообщить модератору
 Re: Запрос для проверкы нескольких строк сразу  [new]
skais675
Member

Откуда:
Сообщений: 76
А что здесь непонятного - мне нужно получить id_m у которых параметры id_v соответствуют условиям. Это я привел самый простой пример, потому как параметров гораздо больше и количество их меняется - иногда необходимо в условие поставить только два параметра а иногда и 32.
28 ноя 16, 09:46    [19941410]     Ответить | Цитировать Сообщить модератору
 Re: Запрос для проверкы нескольких строк сразу  [new]
КусокАналитика
Guest
1) Запишите свои 32 условия во временную таблицу.

2) Сделайте внутреннее соединение таблицы test с таблицей из пункта 1, условие соединения, надеюсь, очевидно.
28 ноя 16, 10:09    [19941464]     Ответить | Цитировать Сообщить модератору
 Re: Запрос для проверкы нескольких строк сразу  [new]
o-o
Guest
У него на входе список A значений для второй колонки,
в приведенном примере A = {1,2}
Он хочет получить все n такие, что выполняется условие: пара (n, a) является строкой таблицы для каждого а из А.

Ну т.е в его примере найдены 1 и 3,
тк для 1 выполняестя: пары 1,что и 1,2 есть строки исходной таблицы
И для 3 тоже выполняется, 3,1 и 3,2 это строки таблицы
28 ноя 16, 10:17    [19941494]     Ответить | Цитировать Сообщить модератору
 Re: Запрос для проверкы нескольких строк сразу  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21249
SELECT [нужное поле]
FROM [таблица]
WHERE [другое поле] IN (список значений)
GROUP BY [нужное поле]
HAVING COUNT(DISTINCT [другое поле]) = (количество значений)
28 ноя 16, 10:19    [19941502]     Ответить | Цитировать Сообщить модератору
 Re: Запрос для проверкы нескольких строк сразу  [new]
aleks2
Guest
o-o
У него на входе список A значений для второй колонки,
в приведенном примере A = {1,2}
Он хочет получить все n такие, что выполняется условие: пара (n, a) является строкой таблицы для каждого а из А.

Ну т.е в его примере найдены 1 и 3,
тк для 1 выполняестя: пары 1,что и 1,2 есть строки исходной таблицы
И для 3 тоже выполняется, 3,1 и 3,2 это строки таблицы


Плохо то, что это не может внятно сформулировать сам тредстартер.

Akina
SELECT [нужное поле]
FROM [таблица]
WHERE [другое поле] IN (список значений)
GROUP BY [нужное поле]
HAVING COUNT(DISTINCT [другое поле]) = (количество значений)

И это тоже плохо. Ибо любая группировка без нужды - зло.
А здесь достаточно not exists.
"условие: пара (n, a) является строкой таблицы для каждого а из А." <> "нет таких пар (n, a), которые НЕ является строкой таблицы для каждого а из А"
28 ноя 16, 10:23    [19941517]     Ответить | Цитировать Сообщить модератору
 Re: Запрос для проверкы нескольких строк сразу  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8821
Можно перебрать все комбинации, можно отсортировать по id_v и сравнивать со значением в следующей строке.
28 ноя 16, 11:04    [19941742]     Ответить | Цитировать Сообщить модератору
 Re: Запрос для проверкы нескольких строк сразу  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21249
aleks2
здесь достаточно not exists
Угу... пока не возникла надобность отбирать то же, но по 3-4-5-... значениям. А ТС явно недоговаривает, и у него такая надобность возникнет.
28 ноя 16, 11:43    [19942038]     Ответить | Цитировать Сообщить модератору
 Re: Запрос для проверкы нескольких строк сразу  [new]
skais675
Member

Откуда:
Сообщений: 76
Akina
SELECT [нужное поле]
FROM [таблица]
WHERE [другое поле] IN (список значений)
GROUP BY [нужное поле]
HAVING COUNT(DISTINCT [другое поле]) = (количество значений)

Спасибо Вам за предложенное решение!
28 ноя 16, 13:17    [19942575]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить