0

我不断收到语法错误

*关键字“SELECT”附近的语法不正确。

')' 附近的语法不正确。*

当使用 where exists 子句时,我是否使用了正确的 where exists 格式。

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表是我通过and获取stoplocation信息的查找表。该表包含两次stoplocation IDload IDtblLoadstopLOADID

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

然后中继器在表中显示该行两次,只有LoadID相同的行。

这是我的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;

顺便说一句,我不确定您使用的是哪个数据库,但我更喜欢在存在子句上使用“从表中选择 1”。它似乎更具可读性,您马上就知道您只想知道是否有返回,而选择的列根本不重要

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

您在下面说 EXIST,而不是 EXISTS:(​​更改以粗体显示)

"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 回答