我正在編寫一個存儲過程來填充多選控件,我想從數據庫表中取回至少100個選項,但我想確保將所有選項都帶回用戶已經選定。使用UNION出現意外的結果
現有的查詢帶回只有第100行:
SELECT TOP 100
t2.Id,
t2.value2
FROM
table1 t1
INNER JOIN
table2 t2
ON
t1.clientId = t2.clientId AND t1.Id = t2.Id
WHERE
t1.clientId = 1
我添加了一個UNION
到這個查詢,以確保我總是選定的選項後面還有:
SELECT TOP 100
t2.Id,
t2.value2
FROM
table1 t1
INNER JOIN
table2 t2 ON
t1.clientId = t2.clientId AND t1.Id = t2.Id
WHERE
t1.clientId = 1
UNION
SELECT t2.id,
t_si.externalCertificateNumber
FROM table2 t2
INNER JOIN
Table3 t3
ON t2.value = 333
在我的一個測試例子中,有4個先前選擇的選項。其中3個將返回前100名(1不是,因此需要更新)。
我預計會回到101行,並驚訝地得到104.我認爲這是固有的DISTINCT
正在工作的方式。
但是我也看到的是返回的不同的結果。隨着一些(超過3個)不同的值出現。還有一些在之前的TOP 100
中沒有了!
所以我的問題是,UNION
有某種內置的排序,會影響結果?或者還有其他事情在這裏發生?
-----------------------------編輯---------------- --------------
如果我改變上述查詢前5:
和先前選擇的值是:
1, Blue
2, Green
20, Violet
100 Indigo
的結果SELECT自己看起來像這樣:
1, Blue
2, Green
7, Red
15, Cyan
20, Violet
爲SELECT和UNION結果
1, Blue
2, Green
33, Cyan
20, Violet
24, Yellow
100, Indigo
60, Aero
40, Amber
25, Black
這是由例如從數據庫中沒有,但要注意,紅色在SELECT從SELECT與UNION
? – jarlh
我的猜測是,您的查詢中的第二個選擇返回多個記錄。你爲什麼期望從該查詢中獲得單個記錄? –
@jarlh它返回4,這是我的預期。這是之前選擇的4個選項。 – AidanO