반응형
x가 여러 값과 같은 곳에서 선택하는 방법은 무엇입니까?
일부 코드를 디버깅 중이며 다음 SQL 쿼리 (단순 버전)가 발생했습니다.
SELECT ads.*, location.county
FROM ads
LEFT JOIN location ON location.county = ads.county_id
WHERE ads.published = 1
AND ads.type = 13
AND ads.county_id = 2
OR ads.county_id = 5
OR ads.county_id = 7
OR ads.county_id = 9
나는 쿼리에서 매우 이상한 결과를 얻고 있으며 첫 번째 OR이 그 전에 발견 된 AND 연산자를 부정하기 때문에 그 결과를 얻었습니다.
결과적으로 유형 13뿐만 아니라 모든 유형의 광고에 대한 결과가 반환됩니다.
쿼리가 호출 될 때마다 조회해야하는 카운티 엔티티의 양이 다를 수 있습니다.
이에 대한 올바른 방법에 대한 도움을 주시면 감사하겠습니다.
"OR"을 괄호로 묶습니다.
SELECT ads.*, location.county
FROM ads
LEFT JOIN location ON location.county = ads.county_id
WHERE ads.published = 1
AND ads.type = 13
AND
(
ads.county_id = 2
OR ads.county_id = 5
OR ads.county_id = 7
OR ads.county_id = 9
)
또는 더 좋은 방법은 IN을 사용하는 것입니다.
SELECT ads.*, location.county
FROM ads
LEFT JOIN location ON location.county = ads.county_id
WHERE ads.published = 1
AND ads.type = 13
AND ads.county_id IN (2, 5, 7, 9)
OR 표현식 주위에 괄호를 사용하여 쿼리가 올바르게 해석되는지 확인하거나보다 간결하게 IN을 사용할 수 있습니다.
SELECT ads.*, location.county
FROM ads
LEFT JOIN location ON location.county = ads.county_id
WHERE ads.published = 1
AND ads.type = 13
AND ads.county_id IN (2,5,7,9)
IN을 사용하면 더 간단합니다.
SELECT ads.*, location.county
FROM ads
LEFT JOIN location ON location.county = ads.county_id
WHERE ads.published = 1
AND ads.type = 13
AND ads.county_id IN (2,5,7,9)
참고 URL : https://stackoverflow.com/questions/261783/how-to-do-select-from-where-x-is-equal-to-multiple-values
반응형
'code' 카테고리의 다른 글
MySQL 5.0 인덱스-고유 vs 비 고유 (0) | 2020.12.11 |
---|---|
오류 : 'void *'에서 'int'로 캐스트하면 정밀도가 손실됩니다. (0) | 2020.12.11 |
버튼 이미지를 양식 입력 제출 버튼으로? (0) | 2020.12.10 |
NSMutableArray 또는 다른 컨테이너에 NSRange를 어떻게 저장합니까? (0) | 2020.12.10 |
Android SDK 설치 : JDK (Java SE Development Kit)를 찾을 수 없음 (0) | 2020.12.10 |