powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите решить рационально несложную задачу
5 сообщений из 5, страница 1 из 1
Помогите решить рационально несложную задачу
    #39794253
MaxJk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, на тесте был такой вопрос-задачка t-sql. Мой ответ набрал крайне мало баллов .
Интересно просто для себя, как решить данную задачу наиболее правильно, эффективнее.

Задача: Найти такие значения @Свойства.Лицевой, для которых выполняется условие
фильтра по параметрам:
Все комбинации Параметр/Значение, содержащиеся в наборе @filter обязательно
присутствуют на таких лицевых. Наличие других параметров или других значений для
указанных параметров не имеет значения.


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
DECLARE @Свойства TABLE (Лицевой INT, Параметр INT, Значение INT);
INSERT INTO @Свойства
VALUES (1,1,1)
,(1,2,1)
,(1,1,5)
,(2,1,1)
,(2,1,5)
,(2,2,7);

DECLARE @filter TABLE (Параметр INT,Значение INT)
INSERT INTO @filter
VALUES (1,5),(2,7);



Смысл просто найти счета по маскам из другой таблицы



--------
Мои варианты :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
1)
SELECT  sv.Лицевой from @Свойства sv  
JOIN @filter f ON sv.Параметр=f.Параметр AND  sv.Значение=f.Значение 
GROUP BY sv.Лицевой
2)
Select sv.Лицевой from @Свойства sv, @filter f 
where sv.Значение=f.Значение and sv.Параметр=f.Параметр
GROUP BY sv.Лицевой

3) самый безбожный
 Select sv.Лицевой from @Свойства sv  where 
  sv.Параметр =  SOME ( Select f.Параметр from @filter f  )
 AND 
   sv.Значение =  SOME ( Select f.Значение from @filter f  )
   GROUP BY sv.Лицевой
...
Рейтинг: 0 / 0
Помогите решить рационально несложную задачу
    #39794254
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxJk,

Читайте про реляционное деление.
...
Рейтинг: 0 / 0
Помогите решить рационально несложную задачу
    #39794273
MaxJk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm, спасибо, почитаю. пока что то туго понимаю, примеров не так много и с одним столбцом , а тут 2 штуки. реляционного деления нет в tsql вижу.
Уже даже сомневаюсь, что правильно понял задание. Если как понял нужно получить номера лицевых 1 и 2 т.к. (1,1,5) (2,1,5) (2,2,7) соответствуют маске {1, 5} {2, 7}.
А это операция больше напоминает пересечение INTERSECT но не оно конечно
...
Рейтинг: 0 / 0
Помогите решить рационально несложную задачу
    #39794276
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select
 a.Лицевой
from
 (select distinct Лицевой from @Свойства) a
where
 not exists(
  select Параметр, Значение from @filter
  except
  select Параметр, Значение from @Свойства where Лицевой = a.Лицевой
 );
...
Рейтинг: 0 / 0
Помогите решить рационально несложную задачу
    #39794280
MaxJk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,
Спасибо большое. И задание не правильно прочитал в итоге. действительно деление "Все комбинации присутствуют "
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите решить рационально несложную задачу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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