0

構文エラーが発生し続けます

*キーワード「SELECT」付近の構文が正しくありません。

')' 付近の構文が正しくありません。*

where exist 句を使用する場合、where exist の正しい形式を使用していますか。

SELECT 
   tblLoadMaster.Salesperson, tblLoadMaster.LoadID, LoadRate, 
   PayBetween1, Paybetween2, 
   tblLoadMaster.BillingID, OriginationCity, OriginationState, 
   DestinationCity, DestinationState 
FROM tblLoadMaster
WHERE EXISTS (SELECT tblCarrier.CompanyName, tblCarrier.CarrierID 
              FROM tblCarrier 
              WHERE tblLoadMaster.CarrierID = tblCarrier.CarrierID)
  AND EXISTS (SELECT tblCustomer.CompanyName, tblCustomer.Customerflag, tblCustomer.CustomerID, tblCustomer.AddressLine1, tblCustomer.City, tblCustomer.State, tblCustomer.Zipcode, tblCustomer.CompanyPhoneNumber, tblCustomer.CompanyFaxNumber, tblCustomer.SCAC 
              FROM tblCustomer 
              WHERE tblCustomer.CustomerID = tblLoadMaster.CustomerID )
  AND EXISTS(SELECT StopLocationID FROM tblLoadStop 
             WHERE tblLoadMaster.LoadID = tblLoadStop.LoadID) 
  AND EXIST(SELECT StopLocationCompanyName 
            FROM tblStoplocation 
            WHERE tblStopLocation.StoplocationID = tblLoadStop.StoplocationID 
              AND tblLoadMaster.Phase LIKE '%4%')  
ORDER BY 
    tblCarrier.CarrierID DESC;

アップデート

代わりにステートメントを使用INNER JOINしましたが、それでも重複する行が取得されます。tblLoadStopテーブルは、とでstoplocation情報を取得するための私のルックアップ テーブルです。テーブルには2 回が含まれていますstoplocation IDload IDtblLoadstopLOADID

LoadStopID(pk)   LoadID        StopLocationID
476          13521             67       
477          13521            106   

次に、リピーターはLoadID、同じ行のみをテーブルに 2 回表示します。

これが私のINNER JOIN声明です。

SELECT  
   tblCarrier.CarrierID, tblLoadMaster.Salesperson, tblCustomer.CompanyName, 
   tblCarrier.CompanyName, tblCustomer.Customerflag, tblCustomer.CustomerID, 
   tblCustomer.AddressLine1, tblCustomer.City, tblCustomer.State, 
   tblCustomer.Zipcode, tblCustomer.CompanyPhoneNumber, 
   tblCustomer.CompanyFaxNumber, tblCustomer.SCAC, StopLocationCompanyName, 
   tblLoadMaster.LoadID,LoadRate,PayBetween1, Paybetween2 , tblLoadMaster.BillingID, 
   OriginationCity, OriginationState, DestinationCity, DestinationState 
FROM 
   tblLoadMaster 
INNER JOIN 
   tblCarrier On tblLoadMaster.CarrierID = tblCarrier.CarrierID 
INNER JOIN 
   tblCustomer ON tblCustomer.CustomerID = tblLoadMaster.CustomerID
INNER JOIN 
   tblLoadStop ON tblLoadMaster.LoadID = tblLoadStop.LoadID 
INNER JOIN 
   tblLkupCarrierLoad ON tblLkupCarrierLoad.CarrierID = tblCarrier.CarrierID 
INNER JOIN 
   tblStoplocation ON tblStopLocation.StoplocationID = tblLoadStop.StoplocationID  
WHERE 
   tblLoadMaster.Phase LIKE '%4%'  
ORDER BY 
   tblCarrier.CarrierID DESC;
4

2 に答える 2

1

たぶん、最後の「EXISTS」が「EXIST」と書かれているのはタイプミスです。

SELECT tblLoadMaster.Salesperson,  tblLoadMaster.LoadID,LoadRate,PayBetween1, Paybetween2 , tblLoadMaster.BillingID, OriginationCity,OriginationState, DestinationCity, DestinationState 
FROM tblLoadMaster 
 WHERE EXISTS 
    (SELECT tblCarrier.CompanyName,tblCarrier.CarrierID FROM tblCarrier WHERE tblLoadMaster.CarrierID =tblCarrier.CarrierID )
 AND EXISTS 
  (SELECT tblCustomer.CompanyName, tblCustomer.Customerflag, tblCustomer.CustomerID, tblCustomer.AddressLine1, tblCustomer.City, tblCustomer.State, tblCustomeripcode, tblCustomer.CompanyPhoneNumber, tblCustomer.CompanyFaxNumber, tblCustomer.SCAC FROM tblCustomer WHERE tblCustomer.CustomerID=tblLoadMaster.CustomerID )
 AND EXISTS
    (SELECT StopLocationID FROM tblLoadStop WHERE tblLoadMaster.LoadID=tblLoadStop.LoadID) 
 AND EXISTS
  ( SELECT StopLocationCompanyName FROM tblStoplocation WHERE tblStopLocation.StoplocationID=tblLoadStop.StoplocationID AND  tblLoadMaster.Phase LIKE '%4%') 
ORDER BY tblCarrier.CarrierID DESC;

ところで、どのデータベースを使用しているかはわかりませんが、exists 句で「select 1 from table」を使用することを好みます。より読みやすいように見えます。何かが返されるかどうかを知りたいだけであり、選択された列はまったく問題ではないことがすぐにわかります

SELECT tblLoadMaster.Salesperson,  tblLoadMaster.LoadID,LoadRate,PayBetween1, Paybetween2 , tblLoadMaster.BillingID, OriginationCity,OriginationState, DestinationCity, DestinationState 
FROM tblLoadMaster 
 WHERE EXISTS 
    (SELECT 1 FROM tblCarrier WHERE tblLoadMaster.CarrierID =tblCarrier.CarrierID )
 AND EXISTS 
  (SELECT 1 FROM tblCustomer WHERE tblCustomer.CustomerID=tblLoadMaster.CustomerID )
 AND EXISTS
    (SELECT 1 FROM tblLoadStop WHERE tblLoadMaster.LoadID=tblLoadStop.LoadID) 
 AND EXISTS
  ( SELECT 1 FROM tblStoplocation WHERE tblStopLocation.StoplocationID=tblLoadStop.StoplocationID AND  tblLoadMaster.Phase LIKE '%4%') 
ORDER BY tblCarrier.CarrierID DESC;

それはずっときれいではありませんか?

于 2013-01-08T16:09:27.037 に答える
0

以下では、EXISTS ではなく、EXIST と言います: (変更箇所は太字で示されています)

"SELECT 
     tblLoadMaster.Salesperson,  tblLoadMaster.LoadID,
     LoadRate, PayBetween1, Paybetween2 , tblLoadMaster.BillingID, 
     OriginationCity,OriginationState, DestinationCity, DestinationState 
 FROM 
   tblLoadMaster "+
"WHERE 
     EXISTS (SELECT 
                   tblCarrier.CompanyName,tblCarrier.CarrierID 
             FROM 
                    tblCarrier 
             WHERE 
                    tblLoadMaster.CarrierID =tblCarrier.CarrierID )" +
 "AND 
     EXISTS(SELECT 
                  tblCustomer.CompanyName, tblCustomer.Customerflag, 
                  tblCustomer.CustomerID,
                  tblCustomer.AddressLine1, tblCustomer.City, tblCustomer.State, 
                  tblCustomer.Zipcode, tblCustomer.CompanyPhoneNumber,
                  tblCustomer.CompanyFaxNumber, tblCustomer.SCAC 
            FROM 
                  tblCustomer 
            WHERE 
                  tblCustomer.CustomerID=tblLoadMaster.CustomerID )" +
 "AND EXISTS(SELECT 
                  StopLocationID 
             FROM 
                  tblLoadStop 
             WHERE 
                  tblLoadMaster.LoadID=tblLoadStop.LoadID) 
   AND **EXISTS**(SELECT 
                        StopLocationCompanyName 
                   FROM 
                        tblStoplocation 
                   WHERE 
                         tblStopLocation.StoplocationID=tblLoadStop.StoplocationID 
                         AND  
                       tblLoadMaster.Phase LIKE '%4%')  
                   ORDER BY 
                       tblCarrier.CarrierID DESC;");
于 2013-01-08T16:08:28.410 に答える