簡體   English   中英

這個查詢沒有給我預期的結果嗎?

[英]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')

因為它的性能可能會更好,並且使您不必去猜測ANDOR的關聯性(我相信您猜錯了)。

當我給出日期的日期范圍為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM