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
'source' 카테고리의 다른 글
MySql INFORMATION_SCHEMA의 DATA_TYPE과 COLUMN_TYPE의 차이점은 무엇입니까?열 (0) | 2022.10.15 |
---|---|
플라스크 청사진이란 게 정확히 뭐죠? (0) | 2022.10.15 |
임의 오류 SQLOnTransientConnection예외:접속이 종료되었습니다. (0) | 2022.10.15 |
pip install - local.오류: 지원되지 않는 로케일 설정 (0) | 2022.10.15 |
Larabel의 "soft_delete"는 MySQL에 인덱스가 필요합니까? (0) | 2022.10.15 |