2015-08-08 328 views
1

我一直在試圖弄清楚這一點,現在還沒有接近。我得到的錯誤:SQL編碼問題,錯誤「在期望條件的上下文中指定的非布爾類型的表達式,在'或'附近。

An expression of non-boolean type specified in a context where a condition is expected, near 'or'.

我的SQL查詢:

SELECT Pitch.Location_id 
FROM PITCH 
WHERE (((Pitch.Location_Id) Not In 
(SELECT Location_Id FROM BOOKING 
      WHERE BOOKING.StartDate or BOOKING.EndDate  
       NOT BETWEEN '2014-06-08' AND '2014-07-08')) AND  
((PITCH.Type_name)='Delux') AND ((PITCH.Available)=1)) 

如果我刪除or BOOKING.EndDate,查詢完美的作品。

+0

你的Q有一個答案:),你必須保持單獨'WHERE BOOKING.StartDate 不在'2014-06-08'和'2014-07-08'之間或BOOKING.EndDATE NOT BETWEEN'2014-06- 08'AND'2014-07-08'' – wiretext

回答

1

試試這個(如上面@tinka建議):

SELECT Pitch.Location_id 
FROM PITCH 
WHERE ((Pitch.Location_Id) Not In 
      (SELECT Location_Id FROM BOOKING 
      WHERE BOOKING.StartDate NOT BETWEEN '2014-06-08' AND '2014-07-08' 
       OR BOOKING.EndDate NOT BETWEEN '2014-06-08' AND '2014-07-08'))  
      AND ((PITCH.Type_name)='Delux') AND ((PITCH.Available)=1)) 
+0

作品魅力,我現在把它放到我的PHP腳本,並得到的問題:/將張貼另一個問題 –

0

這是你應該嘗試的查詢。請注意,內部查詢仍然採用可擴展的語法。

SELECT P.Location_id FROM PITCH P 
    WHERE 
    P.Type_name='Delux' AND 
    P.Available=1 AND 
    P.Location_Id NOT IN 
     (
     SELECT Location_Id FROM BOOKING B 
      WHERE 
      B.StartDate < '2014-06-08' OR 
      B.StartDate > '2014-07-08' OR 
      B.EndDate < '2014-06-08' OR 
      B.EndDate > '2014-07-08' 
     ) 

現在爲什麼會收到這個錯誤的原因是因爲

WHERE BOOKING.StartDate or BOOKING.EndDate NOT BETWEEN '2014-06-08' AND '2014-07-08'

就像Booking.Startdate正在或-ED評估與BOOKING.EndDate NOT BETWEEN '2014-06-08' AND '2014-07-08'。後者產生一個布爾結果的真假,但前面的表達式Booking.StartDate不是布爾值。

相關問題