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。我误解了这种情况。这只是一个相关条件。你只需要括号。