2012-03-16 239 views
0

说,如果表陷阱具有列 'ID' 和行内容mysql查询。需要帮助

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 
+0

没有整数比12大且小于10 – Antoine 2012-03-16 11:43:40

+0

而且应该还是在第一个查询,因为我猜你正在寻找的是范围小于10或大于12 – pharalia 2012-03-16 11:43:57

+0

这将有助于您确定您正在尝试做什么。如果您想确定哪些行在两个数字之间有值,那么您的第二个表单是正确的,正如您发现的那样。如果你想得到小于一个数字的任何数字,并且你想得到比另一个数字更多的数字,你必须将这两个事物与一个或不是一个和。但是哪一个是正确的取决于你的目标。 – 2012-03-16 11:54:53

回答

2

问题是,您正在使用AND运算符,您应该使用OR。

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>7 and id<14工作是,它可能的值在同一时间是BETWEEN 8和13(含) 。
然而,没有办法可以将值同时小于10和大于12。

所以如果条件是相互排斥的,你必须使用OR,如果条件不排除一个和其他,那么你必须使用AND
您可以在NOT()中包装测试以反转测试,这是因为ANDOR是完全相反的。

+0

@John:谢谢。现在可以运行 – Coder17 2012-03-16 11:45:48

0

我认为你错了,或者你错误地表述了这个问题。

id < 10和id> 12不可能同时为真。这就是为什么你没有得到任何结果为您的第一个查询。

什么你要找的是:

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

您忘记了更正查询... – Johan 2012-03-16 11:51:03