Pat*_*ick 1 sql sql-server union sql-server-2008
SQL Server - 我有3个简单的表(Fname,Lname和Exceptions),每个表都有一个名为Name的列.我希望我的最终结果看起来像:( FName中的每个人和LName中的所有人) - (每个人都是例外).
FName参数:
Name
A
B
Run Code Online (Sandbox Code Playgroud)
LName的:
Name
Y
Z
Run Code Online (Sandbox Code Playgroud)
例外:
Name
A
Z
Run Code Online (Sandbox Code Playgroud)
预期的查询结果集:
B
Y
Run Code Online (Sandbox Code Playgroud)
当前的SQL查询:
Select Name from Fname
UNION ALL
Select Name from Lname
WHERE Name NOT IN
(Select Name from Exceptions)
Run Code Online (Sandbox Code Playgroud)
SQL查询仅适用于删除出现在LName但不出现在Fname中的数据.有人可以帮忙吗
a的各个部分UNION作为单独的查询处理,因此您可以将它们分组到子查询中:
SELECT Name
FROM (Select Name from Fname
UNION ALL
Select Name from Lname)sub
WHERE Name NOT IN (Select Name from Exceptions)
Run Code Online (Sandbox Code Playgroud)
您可以保留它,就UNION ALL好像您不关心重复项一样.
你需要一个子查询,我更喜欢NOT EXISTS:
SELECT X.name
FROM (SELECT name
FROM fname
UNION ALL
SELECT name
FROM lname) X
WHERE NOT EXISTS (SELECT 1
FROM exceptions E
WHERE x.name = E.name)
Run Code Online (Sandbox Code Playgroud)
我应该使用NOT IN,OUTER APPLY,LEFT OUTER JOIN,EXCEPT还是NOT EXISTS?
但是,NOT IN工作方式相同:
SELECT X.name
FROM (SELECT name
FROM fname
UNION ALL
SELECT name
FROM lname) X
WHERE X.name NOT IN (SELECT name
FROM exceptions)
Run Code Online (Sandbox Code Playgroud)
如果你的 RBBMS 除了(SQL Server 或 PostgreSQL 有,不知道 MySQL)
select Name from FName
union all
select Name from LName
except
select Name from Exceptions
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18565 次 |
| 最近记录: |