我们的第三方应用程序具有以下自定义视图:
FROM dbo.vwPositionAssetSubWeight
INNER JOIN dbo.vwPositionAssetSubTotal
ON dbo.vwPositionAssetSubWeight.AssetID = dbo.vwPositionAssetSubTotal.AssetID
FULL OUTER JOIN dbo.vwPositionAssetPendingTrades
ON dbo.vwPositionAssetSubWeight.AssetID = dbo.vwPositionAssetPendingTrades.AssetID
, dbo.vwPositionPortfoliosTotal
注意:没有where子句。
有些混乱是有道理的,但我不熟悉最后一个视图是如何连接的,也可能是不连接的。 dbo.vwPositionPortfoliosTotal是否对所有内容都是交叉连接?这是我的猜测。此外,dbo.vwPositionPortfoliosTotal返回一行。
重写此内容的最佳方法是什么,这对下一位开发人员有意义吗?
哦,没有别名,111个返回的字段,没有文档,备注,提示甚至是一堆面包屑。
答案 0 :(得分:2)
dbo.vwPositionPortfoliosTotal
的连接标准将在WHERE子句中找到,因此为了说明它的作用,您必须发布该部分。寻找它所说的dbo.vwPositionPortfoliosTotal.[column] = dbo.[table].[column]
编辑:
正如接受的答案所说,没有WHERE这是一个交叉加入。
答案 1 :(得分:2)
这确实是一个交叉联接。如果你真的想说清楚,只需用“CROSS JOIN”替换逗号。
答案 2 :(得分:2)
是的,最后一部分', dbo.vwPositionPortfoliosTotal
'是逗号之前和dbo.vwPositionPortfoliosTotal
之间的所有内容的交叉连接,但它也取决于WHERE部分。
要查看您是否可以重写此交叉联接(例如删除它),您必须显示从vwPositionPortfoliosTotal
中删除了哪些字段以及使用了哪些条件。
答案 3 :(得分:2)
这两个陈述是等价的。
SELECT *
FROM a, b
SELECT *
FROM a CROSS JOIN b
检查你的where子句......可能会有隐藏在其中的加入条件,这会导致你选择内部/外部联接。
答案 4 :(得分:0)
在FROM
语句的SELECT
子句中使用逗号与笛卡尔积(交叉连接)相同。
例如,
SELECT *
FROM a, b
会将a
中的每条记录与b
的每条记录相匹配。它相当于
SELECT *
FROM a
CROSS JOIN b