Запрос с ИЛИ, исключая результаты в SQL - PullRequest
0 голосов
/ 22 января 2019

Я выполняю этот запрос:

SELECT SQL_CALC_FOUND_ROWS uniqueid, start
FROM sometable
LEFT JOIN log ON 
    sometable.uniqueid = log.anid AND (log.info='someinfo' or log.info='otherinfo')
WHERE `moreInfo` = 1 AND `type` = 'myType' 
  AND (`channel` LIKE 'ACHANNEL/%' or `channel` LIKE 'OTHERCHANNEL\/%')
  AND `start` > '2019-01-22 00:00:00' AND `start` < '2019-01-22 23:59:59'
GROUP BY uniqueid

Однако эта часть не работает:

AND (`channel` LIKE 'ACHANNEL%' or `channel` LIKE 'OTHERCHANNEL%')

Я хочу, чтобы это дало мне все каналы, которые начинаются с ACHANNEL /, или канал, начинающийся с OTHERCHANNEL /, вместо этого он всегда дает мне результаты, которые начинаются с OTHERCHANNEL /.

Кажется, что OR не работает.

Любая помощь?

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Ваш запрос должен делать то, что вы хотите.Если вам не хватает строк, то, возможно, шаблоны на самом деле не совпадают.

У меня есть несколько советов:

SELECT SQL_CALC_FOUND_ROWS t.uniqueid, MIN(start) as start
FROM sometable t LEFT JOIN
     log l
     ON t.uniqueid = l.anid AND l.info in ('someinfo', 'otherinfo')
WHERE t.`moreInfo` = 1 AND
      t.`type` = 'myType' AND
      (t.`channel` LIKE 'ACHANNEL/%' or t.`channel` LIKE 'OTHERCHANNEL/%') AND
     t.`start` > '2019-01-22' AND `start` < '2019-01-23'
GROUP BY t.uniqueid;

Обратите внимание, что я квалифицировал все столбецимена и предполагается, что все ссылки на столбцы в WHERE относятся к sometable, а не log.В противном случае LEFT JOIN будет преобразован в INNER JOIN.

Примечания:

  • Все столбцы имеют квалификацию , что означает использование псевдонимов таблицы.Настоятельно рекомендуется, когда запрос содержит более одной ссылки на таблицу.
  • Арифметика даты была упрощена.
  • Множественные сравнения с OR были упрощены с использованием IN.
  • Столбец "голые" start был превращен в функцию агрегирования.
  • Удаленный символ \ был удален.Нет необходимости в экранирующих символах с косой чертой.
0 голосов
/ 22 января 2019

Вы не избежали своего первого состояния:

AND (channel LIKE 'ACHANNEL\/%' or channel LIKE 'OTHERCHANNEL\/%')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...