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

Откуда:
Сообщений: 67
Добрый вечер!

Задача следующая:
имеется таблица Table1 с полями:
1: номер
2: число

номер число
125 7
125 8
125 9
126 7
126 8
127 7
127 10
128 7
128 10

Необходимо выбрать номера с числами 7 и 10!
Пытался делать следующим образом:

SELECT номер
FROM Table 1
WHERE число IN(7,10)


но в итоге получаю номера 125,126,127,128 что неверно, необходимо чтобы был следующий ответ: 127, 128..
подскажите новичку =)
23 июл 13, 20:01    [14606510]     Ответить | Цитировать Сообщить модератору
 Re: Запрос(выборка)  [new]
Crimean
Member

Откуда:
Сообщений: 13148
гуглить "поиск непрерывных диапазонов"
23 июл 13, 20:04    [14606524]     Ответить | Цитировать Сообщить модератору
 Re: Запрос(выборка)  [new]
Добрый Э - Эх
Guest
igor171,

только сегодня было - реляционное деление
23 июл 13, 20:20    [14606577]     Ответить | Цитировать Сообщить модератору
 Re: Запрос(выборка)  [new]
Добрый Э - Эх
Guest
igor171,

хотя, возможно подойдет банальный IN + GROUP BY...HAVING
23 июл 13, 20:23    [14606583]     Ответить | Цитировать Сообщить модератору
 Re: Запрос(выборка)  [new]
Добрый Э - Эх
Guest
Добрый Э - Эх
igor171,

хотя, возможно подойдет банальный IN + GROUP BY...HAVING
Как выяснилось, GROUP BY ... HAVING - один из способов реализации реляционного деления
23 июл 13, 20:27    [14606592]     Ответить | Цитировать Сообщить модератору
 Re: Запрос(выборка)  [new]
igor171
Member

Откуда:
Сообщений: 67
Немного недогоняю...
пишу так:

SELECT номер
FROM Table 1
GROUP BY номер
HAVING число IN(7,10)

но не выходит..
23 июл 13, 21:03    [14606740]     Ответить | Цитировать Сообщить модератору
 Re: Запрос(выборка)  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
igor171,

И что, примеры по ссылке не помогают догнать?!
23 июл 13, 21:18    [14606798]     Ответить | Цитировать Сообщить модератору
 Re: Запрос(выборка)  [new]
igor171
Member

Откуда:
Сообщений: 67
не судите строго, sql изучаю неделю ...
23 июл 13, 21:24    [14606821]     Ответить | Цитировать Сообщить модератору
 Re: Запрос(выборка)  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
igor171,

Да кто ж судит то?!

автор
пишу так


А в примерах по ссылке что написано?
23 июл 13, 21:33    [14606845]     Ответить | Цитировать Сообщить модератору
 Re: Запрос(выборка)  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Добрый Э - Эх
Как выяснилось, GROUP BY ... HAVING - один из способов реализации реляционного деления


Давнишний способ, использовавшийся до появления синтаксического сахара в виде EXCEPT и т.п.
23 июл 13, 21:38    [14606863]     Ответить | Цитировать Сообщить модератору
 Re: Запрос(выборка)  [new]
igor171
Member

Откуда:
Сообщений: 67
В примерах описывается случай с количеством(COUNT)... но мне же количество не нужно, мне нужно выести с заданными числами..

сейчас пытаюсь так:
SELECT номер
FROM Table 1
GROUP BY номер
HAVING число IN( SELECT
FROM Table 1
WHERE число IN(7,10)
)
23 июл 13, 21:42    [14606879]     Ответить | Цитировать Сообщить модератору
 Re: Запрос(выборка)  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
igor171,

автор
с количеством(COUNT)...


Путаете кляузы WHERE и HAVING. А так же (почему то) не обращаете внимание на то, что в примерах не просто COUNT, а COUNT(DISTINCT...)
23 июл 13, 21:47    [14606892]     Ответить | Цитировать Сообщить модератору
 Re: Запрос(выборка)  [new]
igor171
Member

Откуда:
Сообщений: 67
pkarklin, спасибо что помогаете(наставляете)

вроде так..

SELECT номер
FROM Table 1
WHERE число IN(7,10)
GROUP BY номер
HAVING COUNT(DISTINCT число)=2
23 июл 13, 21:55    [14606906]     Ответить | Цитировать Сообщить модератору
 Re: Запрос(выборка)  [new]
igor171
Member

Откуда:
Сообщений: 67
pkarklin, очень интересно, не могли бы вы дать совет(помочь) с этими же данными, только вопрос теперь вот в чем: выбрать номера которые не содержат числа(например 9) тогда правильный ответ должен быть: 126,127,128
числа(например 9 и 10) тогда правильный ответ должен быть: 126

получается противоположность предыдущей задачи:
номер = number
число = chislo


SELECT number
FROM dbo.Table_1
WHERE chislo NOT IN(5)
GROUP BY number
HAVING COUNT(DISTINCT chislo)=(SELECT COUNT(DISTINCT chislo) FROM dbo.Table_1 )


как и в примере указал переменную SELECT COUNT(DISTINCT chislo) FROM dbo.Table_1 - так как неудобно указывать кол-во.
24 июл 13, 00:57    [14607695]     Ответить | Цитировать Сообщить модератору
 Re: Запрос(выборка)  [new]
Добрый Э - Эх
Guest
igor171,

почитай уже про [NOT] EXISTS
24 июл 13, 04:01    [14607941]     Ответить | Цитировать Сообщить модератору
 Re: Запрос(выборка)  [new]
лови
Guest
igor171,

SELECT T.номер
FROM Table1 as T
WHERE T.Число = 7 
 AND EXISTS (SELECT 1 
                   FROM Table1 TT 
                   WHERE TT.номер = T.номер 
                     AND TT.число = 10)
24 июл 13, 10:15    [14608586]     Ответить | Цитировать Сообщить модератору
 Re: Запрос(выборка)  [new]
Павел Воронцов
Member

Откуда: Новосибирск
Сообщений: 2385
Блог
igor171,

select t1.nomer
from t t1
where not exists (select 1
        from t t2
        where t2.chislo in (7,10)
           and not exists (select 1
                   from t t3
                   where t3.nomer = t1.nomer
                          and t3.chislo = t2.chislo))
24 июл 13, 10:35    [14608750]     Ответить | Цитировать Сообщить модератору
 Re: Запрос(выборка)  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
;with Table1 as (select * from (values
   (125,7),(125,8),(125,9),(126,7),(126,8),
   (127,7),(127,10),(128,7),(128,10)
	)temp_Table1(num,val))
select 'номера которые не содержат числа 9'[номера которые не содержат числа 9],* 
from Table1 t
where not exists(
   select * from Table1 
   where val =9 and num=t.num
   )
order by t.num, t.val
24 июл 13, 10:53    [14608858]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить