본문 바로가기
MySql

MySQL 동일한 열에서 여러 WHERE 조건으로 선택

by 베이스 공부 2020. 11. 1.
반응형

좋아, 나는 여기서 명백하고 단순한 것을 간과하고 있다고 생각한다 ...하지만 동일한 열에서 여러 기준과 일치하는 레코드 만 반환하는 쿼리를 작성해야합니다 ...

내 테이블은 사용자에게 플래그를 적용하기위한 매우 간단한 연결 설정입니다.

ID   contactid  flag        flag_type 
-----------------------------------
118  99         Volunteer   1 
119  99         Uploaded    2 
120  100        Via Import  3 
121  100        Volunteer   1  
122  100        Uploaded    2

등 ...이 경우 연락처 99와 100이 모두 "Volunteer"및 "Uploaded"로 플래그 지정된 것을 볼 수 있습니다.

내가 할 수 있어야 할 것은 검색 양식을 통해 입력 한 여러 기준과 일치하는 연락처 ID 만 반환하는 것입니다 ... 연락처 ID는 선택한 모든 플래그와 일치해야합니다 ... 내 머리에 SQL은 다음과 같이 보일 것입니다.

SELECT contactid 
 WHERE flag = 'Volunteer' 
   AND flag = 'Uploaded'...

하지만 ... 아무것도 반환하지 않습니다 ... 내가 여기서 뭘 잘못하고 있니?

 

해결 방법

 

GROUP BY HAVING COUNT (*) = _ 를 사용할 수 있습니다.

SELECT contact_id
FROM your_table
WHERE flag IN ('Volunteer', 'Uploaded', ...)
GROUP BY contact_id
HAVING COUNT(*) = 2 -- // must match number in the WHERE flag IN (...) list

( contact_id, flag 가 고유하다고 가정).

또는 조인을 사용하십시오.

SELECT T1.contact_id
FROM your_table T1
JOIN your_table T2 ON T1.contact_id = T2.contact_id AND T2.flag = 'Uploaded'
-- // more joins if necessary
WHERE T1.flag = 'Volunteer'

플래그 목록이 매우 길고 일치하는 항목이 많으면 첫 번째가 더 빠를 것입니다. 플래그 목록이 짧고 일치하는 항목이 거의없는 경우 두 번째가 더 빠르다는 것을 알 수 있습니다. 성능이 문제가되는 경우 데이터에서 두 가지를 모두 테스트하여 어떤 것이 가장 잘 작동하는지 확인하십시오.

 

참조 페이지 https://stackoverflow.com/questions/4047484

 

 

반응형

댓글