2017-04-07 57 views
2

比赛两个SELECT语句我有以下的select语句两个SQL的观点:的比较

1.

select SUBSTRING(UpdatedColumn,3, 9) as [PartialSearch] from [Database_Name].[dbo].[Table] 

2.

select SUBSTRING(OldColumn,3, 9) as [PartialSearchOnLiveTable] from [Same_Database_Name].[dbo].[DifferentTable] 

这两种观点仅分别返回1列。现在我想比较第一个视图中的值和第二个视图中的值,并返回找不到匹配的UpdatedColumn数据。

我已经考虑过使用比较运算符,但似乎无法得到我想要的,因为根据我的逻辑,我将不得不指定在where子句中针对彼此的条件检查,并且sql不允许那。另外,UNION/UNION ALL只会给我所有记录的结果集。这是我不想要的东西。

最后,我看看Combine two select statements for date comparison,它不是我要找的东西。

实际上,查看1返回:

abcxxxxxx 
dokjfhxxx 
cmodxxxxx 
wuysxxxxx 
aaallooxx 

查看2返回:

xdsffsafa 
xxxxhjsks 
ajdhxxxxx 
cmodxxxxx 
xxxxxx12s 
skskshdki 
aaallooxx 

从我们看到,有两场比赛的输出。那

aaallooxx 
cmodxxxxx 

这就是我正在寻找的输出。有什么建议么?

+0

INTERSECT,如果你的dbms支持它的话。或者做EXISTS。 – jarlh

回答

3

您可以使用intersect,设置操作员两个查询之间。因此它仅打印两个查询中存在的常见行。

select SUBSTRING(OldColumn,3, 9) as [PartialSearchOnLiveTable] from [Same_Database_Name].[dbo].[DifferentTable] 
intersect --Set Operation between the two queries 
select SUBSTRING(UpdatedColumn,3, 9) as [PartialSearch] from [Database_Name].[dbo].[Table] 
+0

感谢您的解决方案。这似乎是最快和最有效的做法。我现在要找到那些不匹配的东西。使用'NOT EXISTS'运算符看起来不像是要走的路。与INTERSECT运算符相反的是什么? –

+1

'TableA EXCEPT TableB',给出A中不存在的记录(对于SQL Server)。你可以在oracle中使用'MINUS'。 –

+0

不存在也有同样的伎俩 –

0
select SUBSTRING(UpdatedColumn,3, 9) as [PartialSearch] 
from [Database_Name].[dbo].[Table] a 
INNER JOIN [Database_Name].[dbo].[Diff_Table] b 
ON a.SUBSTRING(UpdatedColumn,3, 9) = b.SUBSTRING(OldColumn,3, 9) 

您只需加入他们通常使用字符串输出

+0

由于某些奇怪的原因,它似乎无法识别别名。消息4121,级别16,状态1,行7 找不到列“a”或用户定义的函数或聚合“a.SUBSTRING”,或名称不明确。 –