今天我們發現了SQL Server 2012 SP1的一些奇怪行爲。我們知道如何重現問題,但我們不確定是什麼原因造成的。這裏是一個非常廣義的例子:Select語句「where in」返回的子行數多於行
假設你有一個數據庫,測試,有一個表,表1,具有下列數據:
column1
-
1
2
3
4
您運行下面的查詢:
USE [test]
SELECT [column1]
FROM [test].[dbo].[table1]
WHERE [column1] IN
(SELECT TOP 5 [column1]
FROM [table1])
正如預期的那樣返回5行。現在運行以下查詢:
USE [test]
SELECT [column1]
FROM [test].[dbo].[table1]
WHERE [column1] IN
(SELECT TOP 5 [test].[dbo].[table1].[column1]
FROM [table1])
10行返回這個時候,即使SELECT TOP 5 [test].[dbo].[table1].[column1] FROM [table1]
返回5行。
看看執行計劃,我可以告訴服務器正在做一些不同的事情,但我不知道爲什麼。
該解決方案似乎是爲了確保我們不會無緣無故地過於明確,但現在我們遇到了,我們希望確保沒有人再次導致此行爲。
」在以下查詢中,第二個select語句實際上是從第一個表中選擇一列。「 我們知道它與上下文有關,但無法弄清楚它在做什麼。這很有道理。 –