MySQL Where Clause не фильтрует данные

0

Я пытаюсь выполнить следующий запрос. запрос работает, но не фильтрует данные как предложение where. Я не могу понять проблему

Заранее спасибо!

 SELECT
    case when count(*) = 1 then
    (select chacc from xxx_1 s inner join xxx_2 d on s.MCHRRN = rrn(d)
     where d.CHCHNO = dp.CHCHNO and d.CHBKBR = dp.CHBKBR AND d.CHBRCH = dp.CHBRCH AND
     s.MCHPNDT = st.MCHPNDT)
    else 1 end  as is_multiple,
    count(*) as ch_tot,
    dp.CHBRCH,
    dp.CHCHNO,
    dp.CHBKBR,
    SUM(dp.CHCHAM) as chq_amt_tot,
    st.MCHPNDT,
    dp.CHCHST
FROM xxx_3 st
INNER JOIN xxx_4 dp
    ON st.MCHRRN = RRN(dp)
WHERE st.MCHSTAT='P' AND st.MCHAPP IN (40,50) OR (st.MCHAPP = 26 AND st.MCHSVST = 1) AND
    dp.CHDWAC=29 AND dp.CHCHNO=5261 AND st.MCHPNDT BETWEEN 2018001 AND 2018100
GROUP BY dp.CHBRCH,dp.CHCHNO,dp.CHBKBR,dp.CHCHST,st.MCHPNDT
ORDER BY st.MCHPNDT ASC
  • 2
    Вы, кажется, смешиваете AND и OR без круглых скобок для обеспечения порядка, так что вполне возможно, что он оценивает в порядке, который вы не ожидаете.
Теги:

1 ответ

1
Лучший ответ

Я подозреваю, что вам просто нужны скобки:

WHERE ( (st.MCHSTAT = 'P' AND st.MCHAPP IN (40, 50) ) OR
        (st.MCHAPP = 26 AND st.MCHSVST = 1)
      ) AND
      dp.CHDWAC = 29 AND
      dp.CHCHNO = 5261 AND
      st.MCHPNDT BETWEEN 2018001 AND 2018100

Если вы используете как AND и OR в булевых выражениях, я бы рекомендовал вам всегда использовать круглые скобки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню