MySQL查询能否基于两列为IN子句定义数值范围?
MySQL中基于checkin和checkout列定义范围查询的正确写法
首先明确:你提到的两种写法在MySQL里都是无效的,没法直接使用。
先拆解问题所在:
- 第一种写法
WHERE checkin, checkout IN (10..15);:MySQL不支持10..15这种范围简写,且多列搭配IN时,IN后必须是成对的行值集合,而非单个范围。 - 第二种写法
WHERE checkin and checkout IN (10..15);:逻辑与语法都有问题,checkin单独放在AND前会被当作布尔值判断(非零即真),同时10..15的写法也不被MySQL识别,你实际想表达的应该是checkin和checkout都落在10到15之间。
如果你要查询checkin和checkout都处于10到15(包含边界)的记录,正确写法有两种:
方法1:使用BETWEEN运算符
SELECT hotel, destination FROM mytable WHERE checkin BETWEEN 10 AND 15 AND checkout BETWEEN 10 AND 15;
方法2:直接用比较运算符
SELECT hotel, destination FROM mytable WHERE checkin >= 10 AND checkin <= 15 AND checkout >= 10 AND checkout <= 15;
另外补充下多列IN的正确用法:如果是要匹配checkin和checkout的特定值组合(比如(10,12)、(13,15)),写法如下,但这和你要的范围查询不是同一场景:
SELECT hotel, destination FROM mytable WHERE (checkin, checkout) IN ((10,12), (13,15));
内容的提问来源于stack exchange,提问作者Sefiu Rasheed
相关产品推荐
相关产品推荐

