Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查询之间不工作_Mysql_Sql - Fatal编程技术网

Mysql 查询之间不工作

Mysql 查询之间不工作,mysql,sql,Mysql,Sql,我有一个查询,它使用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 =

我有一个查询,它使用
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'
    )
)
即使我在“asd”和“asd”之间写
,它仍然显示所有记录,并且没有给出任何格式错误。

我的查询显示两个特定日期之间的记录是否错误?

我不知道您的逻辑是否正确,但您的语法并没有达到您的目的。我建议:

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和B或C
。你的意图(大概)是
A和(B或C)
1
代替
*


按照您编写查询的方式,无论条件如何,它总是返回1。此外,这是完全合法的。

您需要更多的括号
,其中X和((B)或(C))
OP返回
1
只是为了返回某种数据。您的修复程序没有按您认为的那样执行。如果在
EXISTS
中使用查询,则它返回的列不重要--
EXISTS
只测试是否有行符合条件。你们都对,我错了,我的badI收到您的错误:子句
中的
未知列
ar.id
@MalenaT。我误解了这种情况。这只是一个相关条件。你只需要括号。