> 데이터 베이스 > MySQL 튜토리얼 > WHERE 절에서 IN 대신 ANY를 언제 사용해야 합니까?

WHERE 절에서 IN 대신 ANY를 언제 사용해야 합니까?

Linda Hamilton
풀어 주다: 2025-01-14 20:37:44
원래의
249명이 탐색했습니다.

When Should I Use ANY Instead of IN in a WHERE Clause?

WHERE 절에서 IN 대신 ANY를 사용하는 방법

ID 목록이 포함된 IN을 사용하여 SQL을 생성하는 Rails의 MyModel.where(id: ids) 같은 쿼리가 있다고 가정해 보겠습니다.

<code class="language-sql">SELECT "my_models".* FROM "my_models"
WHERE  "my_models".`"id"` IN (1, 28, 7, 8, 12)</code>
로그인 후 복사

IN 대신 ANY를 사용하려면 다음을 시도해 보세요.

<code class="language-ruby">MyModel.where("id = ANY(VALUES(#{ids.join '),('}))")</code>
로그인 후 복사

그러나 ids 배열이 비어 있으면 이 접근 방식이 실패하고 SQL 구문 오류가 발생합니다.

IN과 ANY 이해

IN 및 ANY 표현식에는 두 가지 형식이 있습니다.

  • expression IN (subquery)
  • expression IN (value [, ...]) 또는 expression ANY (array expression)

두 번째 형식의 경우 IN에는 값 목록이 필요하고 ANY에는 배열이 필요합니다.

ANY와 IN을 사용해야 하는 경우

ANY는 부울 값을 반환하는 모든 연산자와 함께 사용할 수 있는 보다 일반적인 옵션입니다. IN은 ANY의 특별한 경우입니다.

성능면에서 ANY는 결코 = ANY보다 빠르지 않으며 = ANY는 IN보다 그리 빠르지 않습니다. 선택은 편의성에 기초해야 합니다.

ID가 데이터베이스에서 가져온 경우 하위 쿼리나 JOIN을 사용하는 것이 더 효율적입니다. 클라이언트에서 긴 값 목록을 전달할 때 최상의 성능을 얻으려면 배열, unnest() 또는 VALUES 표현식을 사용하는 것이 좋습니다.

= ANY 구문

Postgres는 다음 형식의 배열 표현식을 허용합니다.

  • 배열 생성자: ARRAY[1,2,3]
  • 배열 리터럴: {1,2,3}

유형 변환을 방지하려면 배열을 명시적으로 캐스팅하세요(ARRAY[1,2,3]::numeric[]).

Ruby에서 배열을 전달하는 방법

id이 정수라고 가정:

<code class="language-ruby">MyModel.where('id = ANY(ARRAY[?]::int[])', ids.map { |i| i})</code>
로그인 후 복사

위 내용은 WHERE 절에서 IN 대신 ANY를 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿