distinct 키워드는 중복된 중복 레코드를 필터링하여 하나만 유지하는 데 사용되지만, 고유 레코드의 모든 값을 반환하는 데 사용하는 대신 고유 레코드 수만 반환하는 데 사용되는 경우가 많습니다. 그 이유는 구별은 이중 루프 쿼리로만 해결될 수 있기 때문이며, 이는 의심할 여지 없이 매우 많은 양의 데이터가 있는 웹 사이트의 효율성에 직접적인 영향을 미칠 것입니다.
예를 살펴보겠습니다.
table table
Field 1 Field 2 id 1 name a 2 b 3 c 4 c 5 b
라이브러리 구조는 대략 다음과 같습니다. 이는 단순한 예일 뿐이며 실제 상황은 훨씬 더 복잡합니다.
예를 들어, 하나의 명령문을 사용하여 중복되지 않은 이름을 가진 모든 데이터를 쿼리하려면 Unique를 사용하여 중복된 중복 레코드를 제거해야 합니다.
테이블에서 고유한 이름 선택 결과는 다음과 같습니다.
------------
name a b c
효과를 얻은 것 같은데, 내가 얻고 싶은 것은 id값인가요? 쿼리 문 변경:
테이블에서 고유한 이름, ID 선택
결과는 다음과 같습니다.
----------
id name 1 a 2 b 3 c 4 c 5 b
distinctct가 작동하지 않는 이유는 무엇인가요? 작동하지만 동시에 두 필드에 영향을 미칩니다. 즉, 제외하려면 ID와 이름이 동일해야 합니다. . . . . . .
쿼리 문을 변경해 보겠습니다.
select id, independent name from table
안타깝게도 오류 메시지 외에는 아무것도 얻을 수 없습니다. 구별은 시작 부분에 배치되어야 합니다. where 조건에 구별을 두는 것이 그렇게 어려운가요? 예, 여전히 오류가 보고됩니다.
------------------------------- ------ ------------------ ------ ---
다음 방법도 불가능합니다.
선택 * , 이름별로 테이블 그룹의 개수(고유 이름)
결과:
ORA-00979: GROUP BY 표현식이 아닙니다
00979 - "not a. GROUP BY 표현식"
여전히 오류를 보고합니다.
group by를 order by 및 제한 앞에 배치해야 합니다. 그렇지 않으면 오류가 보고됩니다.
--- ---------------------- --------------- --------- --------------- -----
이게 가능할 것 같아요
max(id), 이름 선택 테이블 그룹에서 이름으로;
결과:
id 이름
1a
2b
4c
5d