【发布时间】:2020-07-16 13:57:36
【问题描述】:
我只想从 CROSS APPLY 返回一行,但是我返回了多个 OwnershipID 行,这与我在 eSub 子查询中得到的不同。有人可以指出我做错了什么吗?
SELECT
o2.OwnershipID,
eSub.AssetID,
esub.EntityID,
esub.Entity
FROM tblOwnership o2
CROSS APPLY
(
SELECT TOP 1
a1.AssetID,
e1.EntityID,
e1.Entity,
o1.OwnershipID
FROM tblAssets a1
INNER JOIN tblOwnership o1 ON a1.AssetID = o1.AssetID
INNER JOIN tblEntity e1 ON o1.EntityID = e1.EntityID
WHERE 1=1
AND o1.OwnershipID = o2.OwnershipID
AND a1.AssetID = 1996323640
ORDER BY o1.OwnershipID DESC, o1.[Date] DESC
) eSub
WHERE 1=1
AND o2.AssetID = 1996323640
ORDER BY o2.OwnershipID DESC
【问题讨论】:
-
我不确定我是否了解这里的问题所在。您的
CROSS APPLY别名为eSub将只返回从别名为o2的表返回的每行 1 行。由于TOP 1,它不能返回超过。 -
@Larnu 我只想返回我粘贴的图像的第一行,但我返回了这 5 个。你知道为什么会这样吗?
-
我不知道那张图片是什么,它来自哪里,它是什么图片?没有
[date]列,因此它似乎与您的CROSS APPLY无关,它引用ORDER BY中的[date]列 -
但是,您的
CROSS APPLY将只返回一个,从表对象tblOwnership o2返回的每行如果您从tblOwnership o2返回多行,那么CROSS APPLY也将返回;每行 1 个。 -
您有 5 个特定资产的所有者?
标签: sql-server inner-join cross-apply