我有2张桌子,每个桌子包含5个独特的城市。我想要所有10个城市,但我不想使用UNION。联盟还有其他选择吗?
SELECT DISTINCT CITY FROM TABLE1
UNION
SELECT DISTINCT CITY FROM TABLE2
答案 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
,但在某些情况下可能会有用。