27,579
社区成员
发帖
与我相关
我的任务
分享
Use tempdb;
Go
Create table [dbo].[a] (name varchar null);
Create table [dbo].[b] (name varchar null);
Create table [dbo].[c] (name varchar null);
Insert Into [dbo].[a] values ('a'),('b'),('c');
Insert Into [dbo].[b] values ('a'),('d'),('c');
Insert Into [dbo].[c] values ('a'),('e'),('f');
GO
Select name From dbo.a
except (
Select name From dbo.a
Intersect
Select name From dbo.b
Intersect
Select name From dbo.c
)
Union All
Select name From dbo.b
except (
Select name From dbo.a
Intersect
Select name From dbo.b
Intersect
Select name From dbo.c
)
Union All
Select name From dbo.c
except (
Select name From dbo.a
Intersect
Select name From dbo.b
Intersect
Select name From dbo.c
)
StmtText
---------------------------------------------------------------------------------------------------------------------------------------------------------
|--Nested Loops(Left Anti Semi Join, OUTER REFERENCES:([Union1037]))
|--Sort(DISTINCT ORDER BY:([Union1037] ASC))
| |--Concatenation
| |--Nested Loops(Left Anti Semi Join, OUTER REFERENCES:([Union1020]))
| | |--Sort(DISTINCT ORDER BY:([Union1020] ASC))
| | | |--Concatenation
| | | |--Nested Loops(Left Anti Semi Join, OUTER REFERENCES:([tempdb].[dbo].[a].[name]))
| | | | |--Sort(DISTINCT ORDER BY:([tempdb].[dbo].[a].[name] ASC))
| | | | | |--Table Scan(OBJECT:([tempdb].[dbo].[a]))
| | | | |--Nested Loops(Left Semi Join, WHERE:([tempdb].[dbo].[a].[name] = [tempdb].[dbo].[c].[name]))
| | | | |--Nested Loops(Left Semi Join, WHERE:([tempdb].[dbo].[a].[name] = [tempdb].[dbo].[b].[name]))
| | | | | |--Table Scan(OBJECT:([tempdb].[dbo].[a]), WHERE:([tempdb].[dbo].[a].[name] = [tempdb].[dbo].[a].[name]))
| | | | | |--Table Scan(OBJECT:([tempdb].[dbo].[b]))
| | | | |--Table Scan(OBJECT:([tempdb].[dbo].[c]))
| | | |--Table Scan(OBJECT:([tempdb].[dbo].[b]))
| | |--Nested Loops(Left Semi Join, WHERE:([tempdb].[dbo].[a].[name] = [tempdb].[dbo].[c].[name]))
| | |--Nested Loops(Left Semi Join, WHERE:([tempdb].[dbo].[a].[name] = [tempdb].[dbo].[b].[name]))
| | | |--Table Scan(OBJECT:([tempdb].[dbo].[a]), WHERE:([Union1020] = [tempdb].[dbo].[a].[name]))
| | | |--Table Scan(OBJECT:([tempdb].[dbo].[b]))
| | |--Table Scan(OBJECT:([tempdb].[dbo].[c]))
| |--Table Scan(OBJECT:([tempdb].[dbo].[c]))
|--Nested Loops(Left Semi Join, WHERE:([tempdb].[dbo].[a].[name] = [tempdb].[dbo].[c].[name]))
|--Nested Loops(Left Semi Join, WHERE:([tempdb].[dbo].[a].[name] = [tempdb].[dbo].[b].[name]))
| |--Table Scan(OBJECT:([tempdb].[dbo].[a]), WHERE:([Union1037] = [tempdb].[dbo].[a].[name]))
| |--Table Scan(OBJECT:([tempdb].[dbo].[b]))
|--Table Scan(OBJECT:([tempdb].[dbo].[c]))
Select name From dbo.a
except (
Select name From dbo.a
Intersect
Select name From dbo.b
Intersect
Select name From dbo.c
)
Union All (
Select name From dbo.b
except (
Select name From dbo.a
Intersect
Select name From dbo.b
Intersect
Select name From dbo.c
) )
Union All (
Select name From dbo.c
except (
Select name From dbo.a
Intersect
Select name From dbo.b
Intersect
Select name From dbo.c
))