Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL запрос проверки всех потомков / 14 сообщений из 14, страница 1 из 1
29.04.2021, 00:13
    #40067034
Challenger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос проверки всех потомков
Добрый день, подскажите пожалуйста как одним запросом проверить что все ребенки есть в таблице.
У одного родителя несколько дочерних объектов (ребенков)

Это таблица 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
29.04.2021, 01:21
    #40067039
Gerros
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос проверки всех потомков
ChallengerКак из первой таблицы выбрать ParentParamID (родителей), таких что все ее ChildParamID есть в таблице tbParamClientReport в поле ParamID?Для этого нужно из первой таблицы выбрать все ParentParamID кроме тех, у которых есть те ChildParamID, которых нет в tbParamClientReport в поле ParamID.
...
Рейтинг: 0 / 0
29.04.2021, 10:24
    #40067095
Challenger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос проверки всех потомков
Gerros,
что то не склается паазл в запрос.
Не сомневаюсь, что можно написать, но пазл не складывается
...
Рейтинг: 0 / 0
29.04.2021, 10:27
    #40067096
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос проверки всех потомков
Challenger, ну ты пример то приведи, чего хочешь получить!
...
Рейтинг: 0 / 0
29.04.2021, 10:37
    #40067104
Challenger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос проверки всех потомков
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
29.04.2021, 10:53
    #40067117
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос проверки всех потомков
Challenger, а как понять, что потомки "все"?
...
Рейтинг: 0 / 0
29.04.2021, 10:59
    #40067119
Challenger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос проверки всех потомков
uaggster
Challenger, а как понять, что потомки "все"?


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

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

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


А можно чуть подробнее.
До конца не понятна идея.
...
Рейтинг: 0 / 0
29.04.2021, 16:47
    #40067336
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос проверки всех потомков
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
29.04.2021, 19:56
    #40067383
godsql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос проверки всех потомков
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
30.04.2021, 00:44
    #40067423
Challenger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос проверки всех потомков
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
30.04.2021, 17:30
    #40067675
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос проверки всех потомков
Challenger,

а что Вы ожидали? Каков вопрос, таков и ответ. Неточные вопросы дают неточные ответы.
...
Рейтинг: 0 / 0
30.04.2021, 21:35
    #40067713
Gerros
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос проверки всех потомков
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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL запрос проверки всех потомков / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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