【问题标题】:mysql query . need assistancemysql查询。需要帮助
【发布时间】:2012-03-16 20:06:59
【问题描述】:

如果表格陷阱的列“id”和行内容为

7
8
9
10
11
12
13
14

SELECT id FROM trap
WHERE id<10 and id>12

这不会给出任何输出

但是如果

SELECT id FROM trap
WHERE id>7 and id<14

给我所需的输出,即,

8
9
10
11
12
13

【问题讨论】:

  • 没有大于 12 且小于 10 的整数。
  • AND 在第一个查询中应该是 OR,因为我猜您要查找的范围小于 10 或大于 12
  • 这将帮助您确定您正在尝试做什么。如果您想确定哪些行具有两个数字之间的值,那么您发现的第二种形式是正确的。如果您想获得小于一个数字的任何数字,并且还想获得大于另一个数字的任何数字,则必须将这两个事物与 OR 而非 AND 结合起来。但哪个是正确的取决于你的目标。

标签: mysql database


【解决方案1】:

问题是您在应该使用 OR 的地方使用 AND 运算符。

SELECT id FROM trap WHERE id<10 OR id>12

显然id不能同时是10和12,一个盒子只能容纳一个值。

或者,您可以将语句写为:

SELECT id FROM trap WHERE NOT(id BETWEEN 10 AND 12) 

SELECT id FROM trap WHERE id&gt;7 and id&lt;14确实起作用的原因是,一个值有可能同时为BETWEEN 8 AND 13(含)。 然而,一个值不可能同时小于 10 和大于 12。

因此,如果条件互斥,则必须使用OR,如果条件不排除其中之一,则必须使用AND
您可以将测试包装在 NOT() 中以反转测试,这是因为 ANDOR 是完全相反的。

【讨论】:

    【解决方案2】:

    我认为你弄错了,或者你的问题措辞有误。

    id 12 不可能同时为真。这就是您第一次查询没有得到任何结果的原因。

    您正在寻找的是:

    SELECT id FROM trap WHERE id<10 OR id>12
    

    【讨论】: