2017-04-07 40 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」,或名稱不明確。 –