[SQL] WHERE COL IN (...) 조건에 대한 제한
SQLWHERE COL IN (...) 조건에 대한 제한
나는 다음과 같은 코드를 사용하고 있습니다 :
SELECT * FROM table
WHERE Col IN (123,123,222,....)
내가 IN 절에서 ~보다 더 많은 3000 개 번호를 넣어 경우, SQL 오류가 발생합니다.
크기가 있다면 누구나 알고 있나요 제한 또는 유사한 무엇?!
해결법
-
==============================
1.사용중인 데이터베이스 엔진에 따라, 명령의 길이에 제한이있을 수 있습니다.
사용중인 데이터베이스 엔진에 따라, 명령의 길이에 제한이있을 수 있습니다.
SQL Server는 매우 큰 한계가있다 :
http://msdn.microsoft.com/en-us/library/ms143432.aspx
오라클은 다른 측면에서 한계에 도달하는 아주 쉬운 있습니다.
그래서, 큰 IN 절을 위해, 그것은 값 삽입, 임시 테이블을 생성하고이 가입 할 것이 좋습니다. 그것은 빠르게도 작동합니다.
-
==============================
2.()가 한계입니다,하지만 당신은에서의 별도의 블록으로 당신의 가치를 나눌 수 있습니다
()가 한계입니다,하지만 당신은에서의 별도의 블록으로 당신의 가치를 나눌 수 있습니다
Select * From table Where Col IN (123,123,222,....) or Col IN (456,878,888,....)
-
==============================
3.쿼리를 매개 변수화하고 매개 변수 값을 갖는 테이블을 사용하여 ID를 전달합니다.
쿼리를 매개 변수화하고 매개 변수 값을 갖는 테이블을 사용하여 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)
-
==============================
4.IN이 하위 선택 곳에 왜하지 ...
IN이 하위 선택 곳에 왜하지 ...
임시 테이블이나 뭔가에 사전 질의 ...
CREATE TABLE SomeTempTable AS SELECT YourColumn FROM SomeTable WHERE UserPickedMultipleRecordsFromSomeListOrSomething
그때...
SELECT * FROM OtherTable WHERE YourColumn IN ( SELECT YourColumn FROM SomeTempTable )
-
==============================
5.버전에 따라, 2008 년에 테이블 반환 매개 변수를 사용하거나 몇 가지 접근 방법은 여기에 설명 :
버전에 따라, 2008 년에 테이블 반환 매개 변수를 사용하거나 몇 가지 접근 방법은 여기에 설명 :
SQL Server 2005의 배열 및 목록
-
==============================
6.당신은 문제의 데이터베이스 엔진을 지정하지 않았다; 오라클에서 옵션은 다음과 같이 사용 튜플이다 :
당신은 문제의 데이터베이스 엔진을 지정하지 않았다; 오라클에서 옵션은 다음과 같이 사용 튜플이다 :
테이블에서 SELECT * WHERE (골 1) IN ((123,1), (123,1), (222,1), ....)
이 추한 해킹은 오라클 SQL에서 작동, https://asktom.oracle.com/pls/asktom/asktom.search?tag=limit-and-conversion-very-long-in-list-where-x-in# 참조 9538075800346844400
그러나, 더 나은 옵션은 저장 프로 시저를 사용하여 배열로 값을 전달하는 것입니다.
-
==============================
7.그것은 38,000 기록에 가까운 처리 할 수있는 것처럼 MS SQL 2016의 경우에로의 int를 통과, 그것은 보인다.
그것은 38,000 기록에 가까운 처리 할 수있는 것처럼 MS SQL 2016의 경우에로의 int를 통과, 그것은 보인다.
select * from user where userId in (1,2,3,etc)
-
==============================
8.이 같은 튜플을 사용할 수 있습니다 : 테이블에서 SELECT * WHERE (골 1) IN ((123,1), (123,1), (222,1), ....)
이 같은 튜플을 사용할 수 있습니다 : 테이블에서 SELECT * WHERE (골 1) IN ((123,1), (123,1), (222,1), ....)
이들의 수에는 제한이 없습니다. 그것은 쌍을 비교합니다.
from https://stackoverflow.com/questions/1069415/limit-on-the-where-col-in-condition by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 데이터베이스 나 시스템 파일에서 이미지를 저장? [닫은] (0) | 2020.03.19 |
---|---|
[SQL] (오라클) 각 그룹에 대해 최고 결과를 얻을 수 있습니다 (0) | 2020.03.19 |
[SQL] MySQL의 함수는 두 날짜 사이의 작업 일 수를 찾을 수 (0) | 2020.03.19 |
[SQL] 한 쿼리에서 두 테이블에서 삭제 (0) | 2020.03.18 |
[SQL] 어떻게 SQL Server의 날짜에 BIGINT (UNIX 타임 스탬프)를 변환 할 수 있습니까? (0) | 2020.03.18 |