반응형
좋아, 나는 여기서 명백하고 단순한 것을 간과하고 있다고 생각한다 ...하지만 동일한 열에서 여러 기준과 일치하는 레코드 만 반환하는 쿼리를 작성해야합니다 ...
내 테이블은 사용자에게 플래그를 적용하기위한 매우 간단한 연결 설정입니다.
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
반응형
'MySql' 카테고리의 다른 글
MySQL Golang Insert NULL into sql instead of empty string (0) | 2020.11.01 |
---|---|
MySQL Simple way to automatically convert INSERT statements to UPDATEs? (0) | 2020.11.01 |
MySQL CentOs 5.5에 Sphinx를 설치하려면 어떻게하나요? (0) | 2020.11.01 |
MySQL MYSQL에서 INSERT TRIGGER 전에 만들기 (0) | 2020.11.01 |
MySQL mysql (5.6) 데이터베이스에 json 배열을 저장할 데이터 유형 (0) | 2020.10.31 |
댓글