这个查询没有给我预期的结果?

时间:2014-03-12 00:37:08

标签: mysql

我一直在努力让它发挥作用,但事实并非如此。当我将adate的日期范围作为2014-03-12时,它甚至会显示以前日期的数据。我在这里缺少什么?

SELECT tno, type, ccno, paidamt, aby, adate, atime 
FROM payment 
WHERE 
    adate<='2014-03-12' 
    AND adate<='2014-03-12' 
    AND aby='anuradha' 
    AND type='ADD' OR type='REM' 
    AND delstat='0'

5 个答案:

答案 0 :(得分:2)

支架

SELECT tno, type, ccno, paidamt, aby, adate, atime 
FROM payment 
WHERE 
    adate<='2014-03-12' 
    AND adate<='2014-03-12' 
    AND aby='anuradha' 
    AND (type='ADD' OR type='REM' )
    AND delstat='0'

同时adate指定两次。您应该删除第二个

SELECT tno, type, ccno, paidamt, aby, adate, atime 
FROM payment 
WHERE 
    adate>='2014-03-12' 
    AND adate<='2014-03-12' 
    AND aby='anuradha' 
    AND type='ADD' OR type='REM' 
    AND delstat='0'

答案 1 :(得分:2)

我认为您的问题与OR有关。将其括在括号中:

SELECT tno, type, ccno, paidamt, aby, adate, atime 
FROM payment 
WHERE 
    adate<='2014-03-12' 
    AND adate<='2014-03-12' 
    AND aby='anuradha' 
    AND (type='ADD' OR type='REM' )
    AND delstat='0'

答案 2 :(得分:2)

我想知道你是否有错字

  adate<='2014-03-12' 
  AND adate<='2014-03-12'

对于2014年3月12日或之前的所有行,查询的日期范围部分要求两次。那可能不是你想要的。

你想要这个吗?

  adate >=  '2014-03-12'
  AND adate < '2014-03-12' + INTERVAL 1 DAY

这一对特殊的不等式是在某一天获得行的最可靠方法。

您也可以替换

AND type='ADD' OR type='REM' 

AND type IN ('ADD', 'REM')

因为它可能会有更好的表现,让你不要试图猜测ANDOR的相关性(我相信你猜错了)。

答案 3 :(得分:1)

  

当我给adate的日期范围作为2014-03-12时,它甚至会向我显示之前日期的数据......我在这里缺少什么?

adate的输入错误。当你说范围时,你应该使用不同的值,但是你没有这样做而且你正在比较之前的日期。因此,以前的日期结果。

尝试这种方式:

set @startDate = '2014-03-01';  -- as an example
set @endDate = '2014-03-12';  

SELECT tno, type, ccno, paidamt, aby, adate, atime 
FROM payment 
WHERE 
    adate between @startDate and @endDate
    AND aby='anuradha' 
    AND type in ('ADD', 'REM') 
    AND delstat='0'

答案 4 :(得分:0)

adate<='2014-03-12' AND adate<='2014-03-12'

在这里似乎是一个非常无用的重复条件。

接下来,由于逻辑运算符的优先级,现在你的语句已经制定,它被评估为

( adate<='2014-03-12' AND adate<='2014-03-12' AND aby='anuradha' AND type='ADD')
OR 
(type='REM' AND delstat='0')

这可能不是你想要的,并解释为什么早期的日期渗透(通过OR条件的右侧。

可以在此处找到SQL中运算符优先级的相当完整的概述:SQL 'AND' or 'OR' comes first?和此处:SQL Logic Operator Precedence: And and Or