在mysql中使用SOME查询时没有给出预期的结果。

时间:2014-10-06 11:19:38

标签: mysql sql

假设我有一张桌子:

start_range           end_range

  1                      4
  4                      8

如果结果大于start_range的任何值且小于任何相应的end_range,我希望结果为真。

EG。

值2应返回true2>12<4  但在这种情况下,值4应返回false 4>1,但4<4变为false,而第4种情况则4&gt; 4变为false。

我无法使用查询

SELECT Sumthing
FROM XYZ
WHERE value> SOME(start_range) AND value < SOME(end_range) 

上述查询的问题就是说值= 4。

现在4&gt;一些(start_range)将变为4> 1。和

4℃;一些(end_range)也将变为4&lt; 8。

但实际上,比较应该像(((4>1)AND(4<4)) OR ((4>4)AND(4<8)))。它应该返回false。

还有一件事,上面的表不是持久性的,我一直在子查询中创建它。这就是为什么我一直在使用SOME。 如果我的问题仍然不明确,请在评论中提及。

3 个答案:

答案 0 :(得分:0)

假设xyz是您的表格:

select (count(*) > 0) as HasMatch
from xyz
where value > start_range and value < end_range;

我不确定您使用some的原因。

编辑:

我想要使用子查询,而xyz不是有问题的表。也许这就是你想要的:

select xyz.*
from xyz
where exists (select 1
              from (<your query here>) t
              where xyz.value > t.start_range and xyz.value < t.end_range
             );

答案 1 :(得分:0)

你可以做这样的事情

SELECT CASE WHEN start_range<value and end_range>value
            THEN 'true'
            ELSE 'false'
       END here_name_to_this_column(optional)
FROM table_name

tutorial link

答案 2 :(得分:0)

select (count(*) > 0) as HasMatch 
from (select  IF(start_range<value and end_range>value, true, false ) as value 
from XYZ having value =1) as MatchTable

DEMO