WHERE col IN (…) 조건에 대한 제한
다음 코드를 사용하고 있습니다.
SELECT * FROM table
WHERE Col IN (123,123,222,....)
그러나 IN
절 에 ~ 3000 개 이상의 숫자를 입력하면 SQL에서 오류가 발생합니다.
크기 제한이나 비슷한 것이 있는지 아는 사람 있나요? !!
사용중인 데이터베이스 엔진에 따라 명령어 길이에 제한이있을 수 있습니다.
SQL Server에는 매우 큰 제한이 있습니다.
http://msdn.microsoft.com/en-us/library/ms143432.aspx
ORACLE은 다른 쪽에서 한계에 도달하기가 매우 쉽습니다.
따라서 큰 IN 절의 경우 임시 테이블을 만들고 값을 삽입하고 JOIN을 수행하는 것이 좋습니다. 또한 더 빠르게 작동합니다.
제한이 있지만 값을 in ()의 개별 블록으로 분할 할 수 있습니다.
Select *
From table
Where Col IN (123,123,222,....)
or Col IN (456,878,888,....)
쿼리를 매개 변수화하고 테이블 값 매개 변수 를 사용하여 ID를 전달합니다 .
예를 들어, 다음 유형을 정의하십시오.
CREATE TYPE IdTable AS TABLE (Id INT NOT NULL PRIMARY KEY)
다음 저장 프로 시저와 함께 :
CREATE PROCEDURE sp__Procedure_Name
@OrderIDs IdTable READONLY,
AS
SELECT *
FROM table
WHERE Col IN (SELECT Id FROM @OrderIDs)
버전에 따라 2008 년에 테이블 값 매개 변수를 사용하거나 여기에 설명 된 몇 가지 접근 방식을 사용합니다.
하위 선택에서 where IN을 수행하지 않는 이유는 무엇입니까?
임시 테이블 등으로 사전 쿼리 ...
CREATE TABLE SomeTempTable AS
SELECT YourColumn
FROM SomeTable
WHERE UserPickedMultipleRecordsFromSomeListOrSomething
그때...
SELECT * FROM OtherTable
WHERE YourColumn IN ( SELECT YourColumn FROM SomeTempTable )
문제의 데이터베이스 엔진을 지정하지 않았습니다. Oracle에서 옵션은 다음과 같은 튜플을 사용하는 것입니다.
SELECT * FROM table WHERE (Col, 1) IN ((123,1), (123,1), (222,1), ....)
이 추악한 해킹은 Oracle SQL에서만 작동합니다. https://asktom.oracle.com/pls/asktom/asktom.search?tag=limit-and-conversion-very-long-in-list-where-x-in# 참조 9538075800346844400
그러나 훨씬 더 나은 옵션은 저장 프로 시저를 사용하고 값을 배열로 전달하는 것입니다.
다음과 같은 튜플을 사용할 수 있습니다. SELECT * FROM table WHERE (Col, 1) IN ((123,1), (123,1), (222,1), ....)
이들의 수에는 제한이 없습니다. 쌍을 비교합니다.
참고 URL : https://stackoverflow.com/questions/1069415/limit-on-the-where-col-in-condition
'developer tip' 카테고리의 다른 글
ASP.NET Core에서 ConfigureServices 내 인스턴스를 확인하는 방법 (0) | 2020.11.24 |
---|---|
Python 2.5에서 사용할 수있는 JSON 모듈은 무엇입니까? (0) | 2020.11.24 |
C ++ 문자열을 여러 줄로 분할 (파싱이 아닌 코드 구문) (0) | 2020.11.24 |
Maven : 플러그인 설명자 오류 검색 실패 (0) | 2020.11.24 |
구글 크롬 북마크 기능 (0) | 2020.11.24 |