SQL Server 2014 UNION 交叉应用

SQL Server 2014 UNION in 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

现在我需要修改它,因为 Table G.dbo.Dump 已被分成 20 个较小的表,现在我有 Dump_00Dump_19
我尝试以这种方式使用 UNION 修改 CROSS APPLY 部分的一部分

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 是否是正确的方法,以及如何应用或其他解决方案?

谢谢!

从联合元素中删除 TOP 1。不知道为什么要添加。从逻辑上讲,您正在寻找一个集合,该集合是所有表的并集。

另外,我认为你根本不想要工会。你想要串联。

CROSS APPLY 
(
    SELECT TOP (1) ii.ItemID
    FROM
        (
            SELECT FROM G.dbo.Dump_00 --changed
            UNION ALL --changed
            SELECT FROM G.dbo.Dump_01 --changed
            .....
        ) ii
) i