限制最大值和最小值的MySQL查询

标签 mysql

我有下表:

    INSERT INTO `test_table` (`id`, `x`, `y`) VALUES (1, 0, 10), (2, 6, 10),
    (3, 9, 10), (4, 2, 9), (5, 4, 9), (6, 3, 8), (7, 7, 8), (8, 9, 8),
    (9, 0, 7), (10, 2, 7), (11, 5, 7), (12, 10, 7), (13, 2, 6), (14, 7, 6),
    (15, 0, 5), (16, 4, 5), (17, 9, 5), (18, 1, 4), (19, 3, 4), (20, 5, 4),
    (21, 10, 4), (22, 8, 3), (23, 3, 2), (24, 6, 2), (25, 2, 1), (26, 8, 1),
    (27, 0, 0), (28, 5, 0), (29, 6, 0), (30, 10, 0);

代表下图:

enter image description here

红色或粉红色单元格中的数字代表“id”,这些单元格的坐标是“x”和“y”。

我所要做的就是想出一个查询来显示所有单元格(只有红色单元格),不包括灰色方 block 内的第 10 个单元格。

到目前为止我有这个:

    SELECT * FROM `test_table` WHERE
    x between 0 and 10 and
    x not between 2 and 8 and
    y between 0 and 10 and
    y not between 2 and 7
    order by id ASC
    LIMIT 30

想象网格在两个方向上都低于 0 并超过 10(图中未显示);查询必须有太多的限制。无论如何,输出不是我想要的,因为它只给我角落里的单元格(绿色区域内的单元格):1、3、8、27 和 30

另一种方法是减去这个查询:

    SELECT * FROM `test_table` WHERE
    x between 2 and 8 and
    y between 2 and 7
    order by id ASC
    LIMIT 30

来自这个:

    SELECT * FROM `test_table` WHERE
    x between 0 and 10 and
    y between 0 and 10
    order by id ASC
    LIMIT 30

...但是又一次;我做不到:(

最佳答案

只需要排除x[2:8],y[2,7]即可。

试试这个:

SELECT * FROM `test_table` 
WHERE NOT(x between 2 and 8 AND y between 2 and 7);

关于限制最大值和最小值的MySQL查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36347555/

相关文章:

mysql - 如何在 VB.net 中运行多行 CMD 代码?

PHP foreach 行作为 $var,行名和行号重复

mysql - Hibernate HQL - 如果一个属性可能为空怎么办

mysql - 在 TINYTEXT 列上使用主键创建表会导致错误 : MySQL #1071 'Specified key was too long; max key length is 255 bytes'

php - MySQL 触发器每次更新都会添加两行

MySQL:远程客户端上的复杂查询是否比本地客户端上慢?

mysql - 如何获得 Laravel 中相同 id 值的总和?

php - 如何使用mysql和php计算列值的总和?

mysql - 如何将文件从 mysql 托管站点同步到谷歌驱动器

mysql - SQL IN 语句的限制