Как лучше всего выбрать данные, отображаемые только в одной из двух таблиц?

Если у меня есть две таблицы, такие как эта:

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')

И я хочу видеть все строки, которые появляются только в одной из таблиц, как лучше всего это сделать?

All I можно придумать, это либо сделать:

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

Что вернет Алана, Фреда и Стива в этом случае.

Но это кажется действительно неуклюжим - есть ли более эффективный способ приблизиться это?

5
задан Adriano Carneiro 5 August 2011 в 13:48
поделиться