source

MySQL 특정 결과를 회피하여 쿼리를 필터링하는 방법

manysource 2022. 10. 15. 10:00

MySQL 특정 결과를 회피하여 쿼리를 필터링하는 방법

다음은 간략화된 동등 항목입니다.

표: user_log

필드: log_id, user_id, log_comment, log_created, log_updated

내가 시도한 것:

    SELECT * FROM user_log 
    WHERE user_id = 123 
    AND log_comment = "The one I want"
    AND NOT log_comment = "The one I don't want"

바람직한 결과:이상적으로는 테이블에서 해당 사용자 ID에 대한 모든 레코드를 반환하고 "The don't want"라는 코멘트가 포함된 경우에는 전혀 반환하지 않는 것이 좋습니다.

실제 결과:효과가 없다.대신 "The want I want"라는 코멘트와 함께 레코드를 반환합니다.

제목부터 명확하지 않았다면 죄송합니다. 제 문제를 어떻게 설명해야 할지 몰랐습니다.

나는 사용할 것이다.NOT EXISTS:

SELECT ul.*
FROM user_log ul
WHERE NOT EXISTS (SELECT 1 
                  FROM user_log ul1 
                  WHERE ul.user_id = ul1.user_id AND ul1.log_comment = "The one I don't want"
                 );
  • 조건부 집계 함수 기반 필터링을 사용할 수 있습니다.Group By그리고.Having절을 클릭합니다.[ Derived ]테이블에서 다음 중 하나를 판별할 수 있습니다.user_id = 123와 언쟁을 벌이다log_comment = "The one I don't want".
  • HAVING NOT SUM(log_comment = "The one I don't want")user_id에 대해 이러한 행이 존재하지 않도록 합니다.
  • 이제 이 파생 테이블 결과 세트를 에 결합하기만 하면 됩니다.user_log테이블에서 다음 행만 가져옵니다.log_comment = "The one I want".
  • user_id에 "The don't want"라는 행이1개라도 있는 경우 이 쿼리는 1개의 행을 반환하지 않습니다.

그룹화 기준과 함께 조건부 집계 사용:

SELECT u1.* 
FROM user_log AS u1 
JOIN (SELECT u2.user_id 
      FROM user_log AS u2 
      WHERE u2.user_id = 123 
      GROUP BY u2.user_id 
      HAVING NOT SUM(u2.log_comment = "The one I don't want")
     ) AS dt ON dt.user_id = u1.user_id 
WHERE 
  u1.log_comment = "The one I want"

나는 사용할 것이다.exists그리고.not exists:

select ul.*
from user_log ul
where exists (select 1
              from user_log ul2
              where ul2.user_id = ul.user_id and
                    ul2.comment = 'The one I want'
             ) and
      not exists (select 1
                  from user_log ul2
                  where ul2.user_id = ul.user_id and
                        ul2.comment = 'The one I don''t want'
                 ) ;
SELECT * FROM user_log 
WHERE user_id = 123 
AND log_comment     LIKE "%The one I want%"
AND log_comment NOT LIKE "%The one I don't want%"

제가 당신의 설명을 읽었을 때, 여기 몇 가지 예가 있습니다.log_comment

"야, 내가 원하는... 그래!" 이 사진을 캡처해 주세요.
"야, 내가 원하는 거" - 그래, 내가 원하는 거" - 이거 캡처해봐
"야, 내가 원하지 않는 거"- 그래! - 이건 건너뛰자.
"야, 내가 원하는 사람.아, 잠깐만. 내가 원하지 않는 거.
'내가 원하지 않는 것'잠깐만, 내가 원하는 것'도 건너뛰었다.

올바른 결과가 아닐 경우 일련의 예를 들어 질문을 명확히 합니다.

이 질문을 이해할 수 있을지 모르겠지만, 이것이 효과가 있을까요?

SELECT * FROM user_log 
WHERE user_id = 123 
AND log_comment not like "%The one I don't want%"

언급URL : https://stackoverflow.com/questions/52991791/mysql-how-to-filter-a-query-based-on-avoiding-a-particular-result