sourcecode

한정된 수의 고유 값으로 선택

copyscript 2022. 9. 11. 17:28
반응형

한정된 수의 고유 값으로 선택

한 열의 고유한 값으로 선택한 청키지를 시도합니다.처음 5개의 구별되는 값에 대해 모든 행을 지정해 주세요.또는 한 열의 다음 5개 값에 대한 모든 행을 지정하십시오.

VBS_DOCUENTION과 같은 표가 있습니다.

PK    T_DOCUMENT
1     1
2     1
3     1
4     3
5     3
6     3
7     5
8     5
9     6
10    7
SELECT * FROM VBT_DOCUMENT 
WHERE T_DOCUMENT IN (SELECT DISTINCT T_DOCUMENT FROM VBT_DOCUMENT LIMIT 2 OFFSET 2);

그런데 다음 오류가 나타납니다.

1235 - 이 버전의 MariaDB는 아직 'LIMIT & IN / ALL / ANY / SOME 서브쿼리'를 지원하지 않습니다.

PK    T_DOCUMENT
7     5
8     5
9     6

FROM 절의 서브쿼리를 사용하여 기본 테이블과 결합합니다.

SELECT t.*
FROM (
  SELECT DISTINCT T_DOCUMENT 
  FROM VBT_DOCUMENT
  ORDER BY T_DOCUMENT
  LIMIT 2 OFFSET 2
) x
JOIN VBT_DOCUMENT t on t.T_DOCUMENT = x.T_DOCUMENT

결과:

| PK  | T_DOCUMENT |
| --- | ---------- |
| 7   | 5          |
| 8   | 5          |
| 9   | 6          |

DB Fielen 보기

주의: LIMIT를 사용할 때는 결정론적 ORDER BY 절도 정의해야 합니다.그렇지 않으면 실행 계획에 따라 예기치 않은 결과가 나타날 수 있습니다.

WITH는 MySQL8.0(또는 MariaDB 10.2.1)에서 사용할 수 있습니다.

WITH abc as (SELECT DISTINCT T_DOCUMENT FROM VBS_DOCUMENT LIMIT 2 OFFSET 2)
SELECT * FROM VBS_DOCUMENT WHERE T_DOCUMENT IN (select * from abc);

출력:

# pk, t_document
'7', '5'
'8', '5'
'9', '6'

언급URL : https://stackoverflow.com/questions/57961847/select-by-a-limited-number-of-distinct-values

반응형