我有一个冗长的查询,我想了解。我在这个论坛中了解到,理解复杂查询的最佳方法是拆分它们,分别检查它们的结果然后合并。我在这里粘贴了一部分代码。
请帮助我理解为什么它会给我一个错误:无法解析查询文本。 关键字“AS”附近的语法不正确。
(SELECT AppID, AppDetailID, AppDetailSavePointID, FieldID, Value AS Acct_Renewed
FROM v_RptAppDetailField_v001
WHERE (FieldID IN (- 87, - 88, - 152, - 179, - 258, - 263))
AND (AppDetailSavePointID = 0) AND (Value IS NOT NULL)) AS Acct_Renewed
ON
v_RptFlatAppDetail_v001.AppDetailID = Acct_Renewed.AppDetailID AND
v_RptFlatAppDetail_v001.AppID = Acct_Renewed.AppID
当我从上面的代码中删除这部分代码时。我得到了结果。请帮我理解这里的ON条款。我很困惑,因为它没有提到任何加入。另请注意,此代码后面有一个左外连接。
AS Acct_Renewed
ON
v_RptFlatAppDetail_v001.AppDetailID = Acct_Renewed.AppDetailID AND
v_RptFlatAppDetail_v001.AppID = Acct_Renewed.AppID
感谢您的帮助。提前谢谢!
答案 0 :(得分:1)
您的第一个SQL块不是完整的查询。您删除的部分是较大查询的一部分。
发生的事情是这个sql ......
SELECT AppID, AppDetailID, AppDetailSavePointID, FieldID, Value AS Acct_Renewed
FROM v_RptAppDetailField_v001
WHERE (FieldID IN (- 87, - 88, - 152, - 179, - 258, - 263))
AND (AppDetailSavePointID = 0) AND (Value IS NOT NULL)
...被用作子查询。您可以在此处获取更多详细信息:http://technet.microsoft.com/en-us/library/ms189575(v=sql.105).aspx
作为子查询,它就像表一样使用。这就是为什么AS Acct_Renewed
后跟ON
子句的原因。此子查询将连接到您未使用该ON
子句复制的上一个表。
答案 1 :(得分:1)
查询的以下部分(分别为您提供结果)称为内嵌视图。您可以为内联视图指定名称(别名)。在这里,它的名称为 Acct_Renewed 。
(SELECT AppID, AppDetailID, AppDetailSavePointID, FieldID, Value AS Acct_Renewed
FROM v_RptAppDetailField_v001
WHERE (FieldID IN (- 87, - 88, - 152, - 179, - 258, - 263))
AND (AppDetailSavePointID = 0) AND (Value IS NOT NULL)
以下条件表明内联视图与另一个名为 v_RptFlatAppDetail_v001 的表/视图/内联视图连接。
ON
v_RptFlatAppDetail_v001.AppDetailID = Acct_Renewed.AppDetailID AND
v_RptFlatAppDetail_v001.AppID = Acct_Renewed.AppID
<强>参考强>:
答案 2 :(得分:0)
Select AppID,
AppDetailID,
AppDetailSavePointID,
FieldID,
Value AS Acct_Renew
(SELECT
AppID,
AppDetailID,
AppDetailSavePointID,
FieldID,
Value AS Acct_Renewed
FROM v_RptAppDetailField_v001 V
WHERE (V.FieldID IN (- 87, - 88, - 152, - 179, - 258, - 263))
AND (VAppDetailSavePointID = 0) AND (V.Value IS NOT NULL )
FROM v_RptAppDetailField_v001 VV
INNER JOIN v_RptAppDetailField_v001 V
ON
v.AppDetailID = vv.AppDetailID AND
v.AppID = vv.AppID