我有以下查詢的SQL Server 2014聯盟CROSS APPLY
SELECT DISTINCT
d.UserName,
i.itemID,
d.Score,
d.StoreCode,
d.Location
FROM
G.dbo.Users d
LEFT JOIN
G.dbo.Emails s on d.UserName=s.UserName
CROSS APPLY
(
SELECT TOP (1)
ii.ItemID
FROM
G.dbo.Dump ii
WHERE
ii.Username=d.UserName
AND
ii.endTime>DATEADD(hh,3,getDate())
) i
WHERE
s.serName is null
AND
d.Score>@_Score
AND
(d.processed=0)
GROUP BY
d.UserName,
i.itemID,
d.Score,
d.StoreCode,
d.Location
ORDER BY
d.UserName ASC
現在我需要修改它,因爲表G.dbo.Dump
已經分裂成20個較小的表,現在我有Dump_00
到Dump_19
我試着以這種方式
CROSS APPLY
(
SELECT TOP (1)
ii.ItemID
FROM
(
SELECT TOP (1) FROM G.dbo.Dump_00
UNION
SELECT TOP (1) FROM G.dbo.Dump_01
UNION
.....
SELECT TOP (1) FROM G.dbo.Dump_19
) ii
WHERE
ii.UserName=d.UserName
AND
ii.EndTime>DATEADD(hh,3,getDate())
) i
但結果修改使用UNION
的CROSS APPLY
節的一部分,工作不正常
可以建議如果UNION
是正確的方式,以及如何申請,或另一種解決方案?
謝謝!
它應該返回什麼?沒有'ORDER BY'的'TOP 1'不保證任何特定的行。 –
因此,我們也需要成爲讀者的頭腦,要知道「不按預期工作」實際上是什麼意思? –
@MartinSmith它應該返回用戶名和第一個(仍然有效)用戶出現在賣家表中,但不在電子郵件表中。 關於TOP 1,是的,你說得對,但它已經足夠了,它返回一個隨機結果時間> DateAdd ...沒有添加Order BY來減少處理時間,因爲轉儲表已超過1億個記錄。 – Joe