WHERE 콜인(...) 조건에 대한 제한
다음 코드를 사용하고 있습니다.
SELECT * FROM table
WHERE Col IN (123,123,222,....)
하지만, 만약 내가 ~3000개 이상의 숫자를 넣는다면.IN
절, SQL에서 오류를 발생시킵니다.
혹시 사이즈 제한이나 이와 유사한 것이 있는지 아는 사람이 있습니까?!!
사용 중인 데이터베이스 엔진에 따라 명령어 길이에 제한이 있을 수 있습니다.
SQL Server에는 매우 큰 제한이 있습니다.
http://msdn.microsoft.com/en-us/library/ms143432.aspx
ORACLE은 다른 면에서 매우 쉽게 한계에 도달할 수 있습니다.
따라서 큰 IN 절의 경우에는 임시 테이블을 만들고 값을 삽입한 후 JOIN을 수행하는 것이 좋습니다.더 빨리 작동합니다.
제한이 있지만 값을 ()의 별도 블록으로 분할할 수 있습니다.
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)
하위 선택에서 where를 수행하는 것이 어떻습니까?
임시 테이블에 사전 쿼리를 하는 것...
CREATE TABLE SomeTempTable AS
SELECT YourColumn
FROM SomeTable
WHERE UserPickedMultipleRecordsFromSomeListOrSomething
그러면...
SELECT * FROM OtherTable
WHERE YourColumn IN ( SELECT YourColumn FROM SomeTempTable )
버전에 따라 2008년에 표 값 매개 변수를 사용하거나 여기에 설명된 몇 가지 접근 방식을 사용합니다.
MS SQL 2016의 경우 in에 int를 전달하면 거의 38,000개의 레코드를 처리할 수 있을 것으로 보입니다.
select * from user where userId in (1,2,3,etc)
저는 단순히 범위를 사용하여 이 문제를 해결했습니다.
WHERE Col >= 123 AND Col <= 10000
그런 다음 응용 프로그램 코드를 루프하여 지정된 범위의 원하지 않는 레코드를 제거합니다.어쨌든 레코드를 반복하고 있었고 수천 개의 레코드를 무시해도 아무런 차이가 없었기 때문에 잘 작동했습니다.
물론 이것은 보편적인 해결책은 아니지만 min과 max 내의 대부분의 값이 필요한 경우 상황에 적합할 수 있습니다.
문제의 데이터베이스 엔진을 지정하지 않았습니다. 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 (색상, 1) IN ((123, 1), (123, 1), (222, 1)...)
이것들의 수에는 제한이 없습니다.쌍을 비교합니다.
언급URL : https://stackoverflow.com/questions/1069415/limit-on-the-where-col-in-condition
'programing' 카테고리의 다른 글
Float Firebase 코어 플러그인.java는 더 이상 사용되지 않는 API를 사용하거나 재정의합니다. (0) | 2023.06.25 |
---|---|
R에서 변수 이름을 지정할 때 선호하는 스타일은 무엇입니까? (0) | 2023.06.25 |
HTTP 오류 503.서비스를 사용할 수 없습니다.웹 사이트에 액세스할 때 앱 풀이 중지됨 (0) | 2023.06.25 |
각 행의 여러 인수를 사용하여 각 데이터 프레임 행에 적용 유사 함수 호출 (0) | 2023.06.25 |
Spring Boot에서 종속성을 선택적으로 업그레이드하는 방법? (샘플 케이스: Spring Data) (0) | 2023.06.20 |