2010-10-15 93 views
1

我在子查詢中的WHERE子句中有一個子查詢。儘管數據庫的設計問題(不是我的工作),但我在嘗試擴展此表達式中的頂級WHERE子句時遇到了一些奇怪的錯誤。下面的例子工作。SQL Server:WHERE子句中包含子查詢的布爾表達式

​​

然後,添加一個簡單的布爾表達式和括號:

  LEFT OUTER JOIN CargoVoyageLocation on CargoVoyageLocation.VoyageLocationID 
         = (SELECT TOP 1 CargoVoyageLocation.VoyageLocationID FROM CargoVoyageLocation 
           JOIN Cargo on CargoVoyageLocation.CargoID = Cargo.CargoID 
           JOIN CargoType on Cargo.CargoTypeID = CargoType.CargoTypeID 
           WHERE 

       (CargoType.SystemName = 'HAZMAT' OR CargoType.SystemName = 'BUNKERS' OR Cargo.IsBunkers = 1) 
        AND 
Here --->      (1=0 OR CargoVoyageLocation.VoyageLocationID 
           = (SELECT VoyageLocationAttribute.VoyageLocationID FROM VoyageLocationAttribute 
             JOIN VoyageLocationAttributeName 
              ON VoyageLocationAttribute.VoyageLocationAttributeNameID = VoyageLocationAttributeName.VoyageLocationAttributeNameID 
              WHERE VoyageLocationAttribute.VoyageLocationAttributeNameID = (SELECT VoyageLocationAttributeNameID FROM VoyageLocationAttributeName WHERE SystemName = 'PREVIOUS_VOYAGE_ID') 
               AND VoyageLocationAttribute.AttributeInt = v.VoyageID) ORDER BY CargoVoyageLocation.ModifiedDate DESC)) 

這將產生以下錯誤:關鍵字 'ORDER' 近

  1. 不正確的語法。
  2. 'v'附近語法不正確。

我很難過。這裏發生了什麼?

回答

2

這ORDER BY子句正在使用的TOP 1(2號線),所以我懷疑你的包圍是錯誤的,最後一行應該是:

AND VoyageLocationAttribute.AttributeInt = v.VoyageID)) ORDER BY CargoVoyageLocation.ModifiedDate DESC) 
+0

正確的,問題解決了,你是我的英雄! – andrerav 2010-10-15 14:03:38