powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Операция
6 сообщений из 6, страница 1 из 1
Операция
    #32040033
Фотография Тимур
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеем: таблица PROBA
id type
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2

таблица type
type
1
2
3

Из таблицы PROBA необходимо выбрать только те id,
у которых есть все типы (1,2,3)

Решение есть, но "кривое"
select id,count(*) from (select pr.id,
pr.type
from PROBA pr
inner join
type tp
on tp.type = pr.type) X
group by id
having count(*) >= (select count(*) from type)

Вернёт 1,3
2,3

У кого-нибудь есть классическое решение?
...
Рейтинг: 0 / 0
Операция
    #32040046
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может поможет?...
обратное решение... т.е. выдает где нет хотябы одного...
перевернуть сумееш ? ...;))
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT     f.id, p.type
FROM         (SELECT     pid.id, t .type
                       FROM          (SELECT DISTINCT id
                                               FROM          dbo.proba) pid CROSS JOIN
                                              dbo.type t) f LEFT OUTER JOIN
                      dbo.proba p ON f.id = p.id AND f.type = p.type
WHERE     (p.type IS NULL)
...
Рейтинг: 0 / 0
Операция
    #32040068
Фотография VVG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
select id from (select id,count(distinct type) as blablabla from PROBA group by id)
where blablabla=(select count(distinct type) from type) 
...
Рейтинг: 0 / 0
Операция
    #32040075
Фотография Тимур
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--2-й вариант Наверное, более медленные
--а
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select distinct p.id
  from PROBA p 
  where not exists (select  1 
                      from  type t
                              left join
                            PROBA p1     
                              on t.type = p1.type and p1.id = p.id
                      where id is null)

--б
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select distinct  id 
  from PROBA pr1
  where  0  <> (select top  1  isnull(id, 0 ) 
                     from type tp
                            left outer join 
                          PROBA pr
                            on tp.type=pr.type and pr.id = pr1.id
                     order by  1   )
...
Рейтинг: 0 / 0
Операция
    #32040076
Фотография Тимур
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 MiCe
ух!!! .. перевернул..:0)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select distinct id from PROBA where id not in (SELECT     f.id
FROM         (SELECT     pid.id, t .type
                       FROM          (SELECT DISTINCT id
                                               FROM          dbo.PROBA) pid CROSS JOIN
                                              dbo.type t) f LEFT OUTER JOIN
                      dbo.PROBA p ON f.id = p.id AND f.type = p.type
WHERE     (p.type IS NULL))
...
Рейтинг: 0 / 0
Операция
    #32040153
Фотография boogier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я б, конечно, вот так сделал:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
declare @c int
select @c=count(*) from @type

select id from (
	select distinct id, type from @proba
	) a
group by id
having count(*)=@c
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Операция
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]