2017-04-05 39 views
0

我有一個查詢,它使用BETWEEN來顯示兩個日期之間的記錄。我的查詢需要顯示特定日期之間的arrival_datedeparture_date。但查詢以某種方式顯示所有記錄。BETWEEN查詢不起作用

列類型是DATE

SELECT DISTINCT art.* FROM accommodation_room_types art 
INNER JOIN accommodation_rooms ar ON art.id = ar.room_type 
INNER JOIN accommodation a ON art.accommodation = a.id 
WHERE a.id = 13 AND NOT EXISTS 
(
    SELECT 1 FROM booked_rooms br INNER JOIN booking b ON br.booking = b.id 
    WHERE br.room = ar.id 
    AND 
    (
     b.arrival_date BETWEEN '2017-12-16' AND '2018-04-16' 
    ) 
    OR 
    (
     b.departure_date BETWEEN '2017-12-16' AND '2018-04-16' 
    ) 
) 

即使我寫BETWEEN 'asd' AND 'asd',它仍然顯示所有記錄,不給任何格式錯誤。 我的查詢是否顯示兩個特定日期之間的記錄錯誤?

+1

你需要的是更多的括號'WHERE X AND((B)OR(C))' – Ibu

回答

0

我不知道你的邏輯是對還是錯,但是你的語法沒有達到你的目的。我建議:

WHERE a.id = 13 AND 
    NOT EXISTS (SELECT 1 
       FROM booked_rooms br INNER JOIN 
         booking b 
         ON br.booking = b.id 
       WHERE br.room = ar.id AND 
         (b.arrival_date BETWEEN '2017-12-16' AND '2018-04-16' OR 
         b.departure_date BETWEEN '2017-12-16' AND '2018-04-16' 
         )  
       ) 

它給我的印象是,在查詢所有空的空間使得它很難看到你的邏輯是寫爲:A AND B OR C。你的意圖(推測)是A AND (B OR C)

+0

我收到你的錯誤:'on子句中的未知列'ar.id' –

+0

@MalenaT。 。 。我誤解了這種情況。這只是一個相關條件。你只需要括號。 –

-1

*

你寫查詢的方式替代1,它總是返回1,不管條件。而且,這完全合法。

+0

OP返回'1'只是爲了返回某種數據。您的修復程序沒有按照您的想法進行。 – Ibu

+0

如果在'EXISTS'中使用了一個查詢,它返回的是什麼列並不重要,'EXISTS'只是測試任何行是否符合條件。 – Barmar

+0

你們都對,我錯了,我的不好 –