替代SQL Server中的UNION

时间:2018-07-11 10:24:23

标签: sql-server

我有2张桌子,每个桌子包含5个独特的城市。我想要所有10个城市,但我不想使用UNION。联盟还有其他选择吗?

SELECT DISTINCT CITY FROM TABLE1
UNION
SELECT DISTINCT CITY FROM TABLE2

4 个答案:

答案 0 :(得分:3)

您可以应用完全外部联接代替联盟

SELECT DISTINCT ISNULL(t.City,t1.City)
FROM dbo.TABLE1 t
FULL OUTER JOIN dbo.TABLE2 t1 ON t.City = t.City;

此查询为您提供与联合相同的结果

答案 1 :(得分:1)

您可以将所需的数据插入到临时表中,然后从那里检索它。这样可以避免使用UNION。

SELECT DISTINCT CITY 
INTO #City 
FROM TABLE1

INSERT INTO #City
SELECT DISTINCT CITY 
FROM TABLE2

SELECT DISTINCT City 
FROM #City

答案 2 :(得分:1)

这是另一种方式

SELECT DISTINCT CASE WHEN a.city is null then b.city else a.city end 
                         FROM Table1 FULL JOIN Table2b ON 1 = 0

与UNION相比,它没有任何优势-但是您可能会对看到FULL JOIN感兴趣,它与UNION有相似之处

答案 3 :(得分:0)

如果第一个表确定包含第二个表的所有记录,则可以检查是否可以在带有OR子句的子查询中找到ID。

我正在使用一个不支持UNION运算符(Apache OJB)的ORM框架,并且在上述假设下,该策略已证明比使用FULL OUTER JOIN更快

例如,如果表STUDENT包含一个省/州的所有学生及其所在主要学校的字段,而另一个表STUDENT_SECONDARY_SCHOOL包含那些兼职就读第二所学校的学生的信息,我可以得到以这种方式全日制或非全日制就读的所有学生:

SELECT STD_ID FROM STUDENT 
WHERE 
    STD_SCHOOL='the_school' 
    OR 
    STD_ID IN (SELECT STD_ID FROM STUDENT_SECONDARY_SCHOOL WHERE STD_SCHOOL='the_school')

同样,我想强调一点,等同于UNION,但在某些情况下可能会有用。