programing

SQL에서 결과를 제외한 OR을 사용하여 쿼리

sourcetip 2022. 10. 8. 16:19
반응형

SQL에서 결과를 제외한 OR을 사용하여 쿼리

다음 쿼리를 수행합니다.

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/로 시작하는 결과를 제공합니다.

수술실이 작동하지 않는 것 같아요

도움이 필요하신가요?

질의는 원하는 대로 수행되어야 합니다.행이 누락된 경우 패턴이 실제로 일치하지 않을 수 있습니다.

몇 가지 제안이 있습니다.

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열이 집계 함수로 전환되었습니다.
  • 이스케이프 캐릭터\가 삭제되었습니다.슬래시가 있는 이스케이프 문자는 필요 없습니다.

첫 번째 조건을 벗어나지 못했습니다.

AND (channel LIKE 'ACHANNEL\/%' or channel LIKE 'OTHERCHANNEL\/%')

언급URL : https://stackoverflow.com/questions/54311866/query-with-or-excluding-results-in-sql

반응형