如果我有两个这样的表格:
“我想要查看仅出现在其中一个表格中的所有行,最好的方法是什么?”
“我所能想到的是要么:”
或者类似于以下内容:
在这种情况下,它将返回Alan、Fred和Steve。
但是这些感觉非常笨重——有没有更有效的方法来处理这个问题?
CREATE TABLE #table1 (id INT, name VARCHAR(10))
INSERT INTO #table1 VALUES (1,'John')
INSERT INTO #table1 VALUES (2,'Alan')
INSERT INTO #table1 VALUES (3,'Dave')
INSERT INTO #table1 VALUES (4,'Fred')
CREATE TABLE #table2 (id INT, name VARCHAR(10))
INSERT INTO #table2 VALUES (1,'John')
INSERT INTO #table2 VALUES (3,'Dave')
INSERT INTO #table2 VALUES (5,'Steve')
“我想要查看仅出现在其中一个表格中的所有行,最好的方法是什么?”
“我所能想到的是要么:”
SELECT * from #table1 except SELECT * FROM #table2
UNION
SELECT * from #table2 except SELECT * FROM #table1
或者类似于以下内容:
SELECT id,MAX(name) as name FROM
(
SELECT *,1 as count from #table1 UNION ALL
SELECT *,1 as count from #table2
) data
group by id
HAVING SUM(count) =1
在这种情况下,它将返回Alan、Fred和Steve。
但是这些感觉非常笨重——有没有更有效的方法来处理这个问题?