gpt4 book ai didi

mysql - SQL - OuterApply 和 Left Join

转载 作者:行者123 更新时间:2023-11-29 12:44:17 29 4
gpt4 key购买 nike

我正在使用一个大型存储过程,但我在处理其中的一小部分时遇到了问题。

当我对正在加入的表执行查询时,可能有 0、1 或 2 个结果。如果有 0 个结果,我并不关心,我的代码返回空值,没什么大不了的。如果有 1 个结果,我的代码将返回正确的值,但是,如果有 2 个结果,我将无法选择第二个结果。

我下面的代码一直有效,直到第二个 OutterApply(AHM2 的东西)。有人看到我做错了什么吗?

两个 OuterApply 的动物 ID 相同。我只需要返回第二个结果(如果有的话),并且如果它与第一个结果不同。

SELECT TOP 1
AHM.AnimalHerdManagementId,
AHM.HerdManagementId,
AHM2.AnimalHerdManagementId,
AHM2.HerdManagementId,
HM.Code AS HerdManagementCode,
HM2.Code AS HerdManagementCode2
OUTER APPLY
(
SELECT TOP 1 AHM.AnimalHerdManagementId, AHM.HerdManagementId
FROM dbo.AnimalHerdManagement AHM
WHERE AHM.AnimalId = A.AnimalId AND ISNULL(AHM.EffectiveFrom, @EffectiveFrom) <= @EffectiveFrom
ORDER BY AHM.EffectiveFrom DESC
) AHM
LEFT JOIN dbo.HerdManagement HM ON AHM.HerdManagementId = HM.HerdManagementId
OUTER APPLY
(
SELECT TOP 1 AHM2.AnimalHerdManagementId, AHM2.HerdManagementId
FROM dbo.AnimalHerdManagement AHM2
WHERE AHM2.AnimalId = A.AnimalId AND AHM2.AnimalHerdManagementId != AHM.AnimalHerdManagementId AND ISNULL(AHM2.EffectiveFrom, @EffectiveFrom) <= @EffectiveFrom
ORDER BY AHM2.EffectiveFrom DESC
) AHM2
LEFT JOIN dbo.HerdManagement HM2 ON AHM2.HerdManagementId = HM2.HerdManagementId

最佳答案

我想我可以帮助您使用OUTER APPLY,但是获取两个不同值的方法将需要一些帮助,因为我的解决方案完全是黑客行为。

首先,您不需要加入外部申请。连接是隐含的。因此您可以完全消除查询中的连接语法。

其次,AnimalHerdManagement 看起来/看起来像是一个称为“连接表”的特殊表。其中包含的所有数据都包含在其他地方(它包含完全冗余的数据,这就是为什么它被称为特殊表)。但这是次要的。

最后,这是我整理的一些示例代码,可以完成您所追求的任务。我用来检索两个外部应用的不同结果的方法是一种 hack,但如果您确定这总是正确的,那么它可能会起作用。我无法让多级外部应用程序工作。

    select * from AH_Animal A
outer apply
(
select max (HerdManagementID) as HerdMgmtID1 from AH_AnimalHerdManagement HM1 where HM1.AnimalID = A.AnimalID
) as z
outer apply
(
select min (HerdManagementID) as HerdMgmtID2 from AH_AnimalHerdManagement HM2 where HM2.AnimalID = A.AnimalID
) as zz

我希望这有帮助。必须有另一种解决方案,因为如果您期望 3 个结果,这根本行不通。

查询结果:

Query Results

关于mysql - SQL - OuterApply 和 Left Join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25672086/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com