[英]This query doesn't give me the expected results?
我一直在努力使它工作,但沒有成功。 當我給的日期范圍adate
為2014年3月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'
括號
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'
另外,date指定了兩次。 您可能應該刪除第二個
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'
我認為您的問題與該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'
我想知道你是否有錯字
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')
因為它的性能可能會更好,並且使您不必去猜測AND
和OR
的關聯性(我相信您猜錯了)。
當我給出日期的日期范圍為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'
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'是第一個? 此處: SQL邏輯運算符優先級:和和或
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.