use*_*000 1 sql t-sql sql-server query-performance
举一个简单的例子,假设我有两个表
T1 T2
======= =======
Val Val
======= =======
1 1
2 3
4 4
5 5
6
Run Code Online (Sandbox Code Playgroud)
我想要的结果集是
2
3
6
Run Code Online (Sandbox Code Playgroud)
因为那些是包含在一个而不是另一个中的数字.我知道可以用类似的东西来完成
WITH cte1 (Val) AS (
SELECT Val
FROM T1
LEFT JOIN T2
ON T1.Val = T2.Val
WHERE Val IS NOT NULL
),
cte2 (Val) AS (
SELECT Val
FROM T2
LEFT JOIN T1
ON T1.Val = T2.Val
WHERE Val IS NOT NULL
)
SELECT *
FROM cte1
UNION WITH cte2
Run Code Online (Sandbox Code Playgroud)
但有更紧凑和/或更有效的方法吗?
一个完全外连接应该有一个或一个子句.
SELECT isnull(t1.Val,t2.Val) [Val]
FROM T1
FULL OUTER JOIN T2
ON T1.Val = T2.Val
WHERE T1.Val is null OR T2.Val is null
Run Code Online (Sandbox Code Playgroud)