code

x가 여러 값과 같은 곳에서 선택하는 방법은 무엇입니까?

codestyles 2020. 12. 10. 20:21
반응형

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

반응형