Я использую SQL-сервер. есть две таблицы:
таблица1: персионские краски
таблица2: персоналии
как найти, какой персоны имеют весь код цвета, используя таблицу цветов.
CREATE TABLE [dbo].[colors](
[colorcode] [varchar](50) NULL
)
CREATE TABLE [dbo].[PersionColors](
[Name] [varchar](50) NULL,
[ColorCode] [varchar](50) NULL
)
INSERT [dbo].[colors] ([colorcode]) VALUES (N'Red')
GO
INSERT [dbo].[colors] ([colorcode]) VALUES (N'Blue')
GO
INSERT [dbo].[colors] ([colorcode]) VALUES (N'Green')
GO
INSERT [dbo].[PersionColors] ([Name], [ColorCode]) VALUES (N'Tom', N'Red')
GO
INSERT [dbo].[PersionColors] ([Name], [ColorCode]) VALUES (N'Tom', N'Blue')
GO
INSERT [dbo].[PersionColors] ([Name], [ColorCode]) VALUES (N'Tom', N'Green')
GO
INSERT [dbo].[PersionColors] ([Name], [ColorCode]) VALUES (N'Tom', N'Brown')
GO
INSERT [dbo].[PersionColors] ([Name], [ColorCode]) VALUES (N'Joe', N'Red')
GO
INSERT [dbo].[PersionColors] ([Name], [ColorCode]) VALUES (N'Joe', N'Blue')
GO
INSERT [dbo].[PersionColors] ([Name], [ColorCode]) VALUES (N'Joe', N'Green')
GO
INSERT [dbo].[PersionColors] ([Name], [ColorCode]) VALUES (N'Hari', N'Red')
GO
INSERT [dbo].[PersionColors] ([Name], [ColorCode]) VALUES (N'Hari', N'Blue')
GO
INSERT [dbo].[PersionColors] ([Name], [ColorCode]) VALUES (N'Nani', N'Blue')
GO
INSERT [dbo].[PersionColors] ([Name], [ColorCode]) VALUES (N'Test', N'Orange')
GO
INSERT [dbo].[PersionColors] ([Name], [ColorCode]) VALUES (N'Hari', N'ye')
GO
INSERT [dbo].[PersionColors] ([Name], [ColorCode]) VALUES (N'a', N'j')
GO
INSERT [dbo].[PersionColors] ([Name], [ColorCode]) VALUES (N'a', N'c')
GO
INSERT [dbo].[PersionColors] ([Name], [ColorCode]) VALUES (N'a', N't')
GO
INSERT [dbo].[PersionColors] ([Name], [ColorCode]) VALUES (N'a', N'u')
GO
INSERT [dbo].[PersionColors] ([Name], [ColorCode]) VALUES (N'b', N'u')
GO
INSERT [dbo].[PersionColors] ([Name], [ColorCode]) VALUES (N'b', N'i')
GO
INSERT [dbo].[PersionColors] ([Name], [ColorCode]) VALUES (N'b', N'o')
Основываясь на двух таблицах выше, я хочу вывод, как показано ниже:
название
Джо
Том
Я попробовал, как показано ниже:
select name from [dbo].[PersionColors] p
join colors c
on p.colorcode=c.colorcode
group by name
having (count(distinct p.colorcode ))=(select count(*)cnt from colors)
запрос выше дает ожидаемый результат. но запрос занимает больше времени при использовании отдельного предложения
в приведенных выше двух таблицах есть большой набор данных (миллиарды записей)
Подскажите, пожалуйста, альтернативное решение для решения этой задачи на сервере SQL