powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL запрос проверки всех потомков
14 сообщений из 14, страница 1 из 1
SQL запрос проверки всех потомков
    #40067034
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, подскажите пожалуйста как одним запросом проверить что все ребенки есть в таблице.
У одного родителя несколько дочерних объектов (ребенков)

Это таблица tbParamParentChild (ролитель-ребенок)
Код: sql
1.
2.
3.
4.
CREATE TABLE [dbo].[tbParamParentChild](
	[ParentParamID] [int] NOT NULL,
	[ChildParamID] [int] NOT NULL,
 )



Есть вторая таблица tbParamClientReport
Код: sql
1.
2.
3.
4.
5.
CREATE TABLE [dbo].[tbParamClientReport](
	[ParamClientID] [int] NOT NULL,
	[CreateDate] [datetime] NOT NULL,
	[ParamID] [int] NOT NULL,
	...



Как из первой таблице выбрать ParentParamID (родителей), таких что все ее ChildParamID есть в таблице tbParamClientReport в поле ParamID?
Именно все потомки присутствуют, а не один какой из потомков.
...
Рейтинг: 0 / 0
SQL запрос проверки всех потомков
    #40067039
Gerros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChallengerКак из первой таблицы выбрать ParentParamID (родителей), таких что все ее ChildParamID есть в таблице tbParamClientReport в поле ParamID?Для этого нужно из первой таблицы выбрать все ParentParamID кроме тех, у которых есть те ChildParamID, которых нет в tbParamClientReport в поле ParamID.
...
Рейтинг: 0 / 0
SQL запрос проверки всех потомков
    #40067095
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gerros,
что то не склается паазл в запрос.
Не сомневаюсь, что можно написать, но пазл не складывается
...
Рейтинг: 0 / 0
SQL запрос проверки всех потомков
    #40067096
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Challenger, ну ты пример то приведи, чего хочешь получить!
...
Рейтинг: 0 / 0
SQL запрос проверки всех потомков
    #40067104
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
Challenger, ну ты пример то приведи, чего хочешь получить!


Вот пример вытащить все ParentParamID если есть хотя бы один потомок. А нужно список ParentParamID достать, если все потомки есть в tbParamClientReport

Код: sql
1.
2.
3.
4.
  SELECT ParentParamID
    FROM tbParamParentChild(NOLOCK)
    WHERE (ChildParamID IN
	(SELECT ParamID FROM tbParamClientReport(NOLOCK) ))
...
Рейтинг: 0 / 0
SQL запрос проверки всех потомков
    #40067117
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Challenger, а как понять, что потомки "все"?
...
Рейтинг: 0 / 0
SQL запрос проверки всех потомков
    #40067119
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
Challenger, а как понять, что потомки "все"?


Для ParentParamID потомки, это все ChildParamID, у которых один и тот же ParentParamID
...
Рейтинг: 0 / 0
SQL запрос проверки всех потомков
    #40067174
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Challenger,

select .. excep select .. в остатке ничего не должно быть.
...
Рейтинг: 0 / 0
SQL запрос проверки всех потомков
    #40067311
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Challenger,

select .. excep select .. в остатке ничего не должно быть.


А можно чуть подробнее.
До конца не понятна идея.
...
Рейтинг: 0 / 0
SQL запрос проверки всех потомков
    #40067336
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Challenger, а вы немного внятнее формулируйте, что вы хотите, и вопросы оформляйте согласно правилам форума, тогда, глядишь, и чуть подробнее будет, знаете ли.
А ить, хрустальные шары на складе - закончились.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
CREATE TABLE #tbParamParentChild(
	[ParentParamID] [int] NOT NULL,
	[ChildParamID] [int] NOT NULL,
 )

 insert into #tbParamParentChild
 Values
 (1, 1),
 (1, 2),
 (1, 3),
 (1, 4),
 (2, 5),
 (2, 6),
 (2, 7),
 (3, 8),
 (3, 9),
 (4, 10),
 (5, 11),
 (5, 12),
 (8, 13),
 (6, 14)

 CREATE TABLE #tbParamClientReport(
	-- Не нужно для существа задачи
	/* [ParamClientID] [int] NOT NULL, 
	 [CreateDate] [datetime] NOT NULL,
	*/
	[ParamID] [int] NOT NULL
)

insert into #tbParamClientReport
 Values
 (2),
 (3),
 (5),
 (10),
 (11),
 (12),
 (14),
 (8),
 (9)
 
 ; With parent_child as
 (Select a.[ParentParamID], a.[ChildParamID] from #tbParamParentChild a 
 Union all
 Select a.[ParentParamID], b.[ChildParamID]
 from parent_child a inner join #tbParamParentChild b on b.ParentParamID = a.ChildParamID
 Where a.[ParentParamID] <> a.[ChildParamID]
 )
 Select Distinct a.ParentParamID 
	from parent_child a
		Where (Select Count(*) from parent_child b Where a.ParentParamID = b.ParentParamID)
			= (Select Count(*) from parent_child bb inner join #tbParamClientReport c on bb.ChildParamID = c.ParamID Where a.ParentParamID = bb.ParentParamID)
...
Рейтинг: 0 / 0
SQL запрос проверки всех потомков
    #40067383
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Challenger
Владислав Колосов
Challenger,

select .. excep select .. в остатке ничего не должно быть.


А можно чуть подробнее.
До конца не понятна идея.

Код: sql
1.
2.
3.
4.
5.
 select  [ParentParamID] from #tbParamParentChild
 except
 select  [ParentParamID] from #tbParamParentChild
 WHERE (ChildParamID IN
	(SELECT ParamID FROM #tbParamClientReport))
...
Рейтинг: 0 / 0
SQL запрос проверки всех потомков
    #40067423
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
godsql
Challenger
пропущено...


А можно чуть подробнее.
До конца не понятна идея.

Код: sql
1.
2.
3.
4.
5.
 select  [ParentParamID] from #tbParamParentChild
 except
 select  [ParentParamID] from #tbParamParentChild
 WHERE (ChildParamID IN
	(SELECT ParamID FROM #tbParamClientReport))



Красивое решение, но оно неправильное.

Оно возвращает всех родителей исключая нужные записи.
...
Рейтинг: 0 / 0
SQL запрос проверки всех потомков
    #40067675
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Challenger,

а что Вы ожидали? Каков вопрос, таков и ответ. Неточные вопросы дают неточные ответы.
...
Рейтинг: 0 / 0
SQL запрос проверки всех потомков
    #40067713
Gerros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Challenger
godsql
пропущено...

Код: sql
1.
2.
3.
4.
5.
 select  [ParentParamID] from #tbParamParentChild
 except
 select  [ParentParamID] from #tbParamParentChild
 WHERE (ChildParamID IN
	(SELECT ParamID FROM #tbParamClientReport))



Красивое решение, но оно неправильное.

Оно возвращает всех родителей исключая нужные записи.


потому что "кроме тех, у которых есть те ChildParamID, которых нет в tbParamClientReport в поле ParamID":
Код: sql
1.
2.
3.
4.
5.
 select  [ParentParamID] from #tbParamParentChild
 except
 select  [ParentParamID] from #tbParamParentChild
 WHERE (ChildParamID NOT IN
	(SELECT ParamID FROM #tbParamClientReport))
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL запрос проверки всех потомков
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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