2014-01-09 3 views
0

이 질문에 답을 얻었지만 내 구체적인 문제를 해결할 수있는 확실한 답을 찾지 못했습니다.SQL의 여러 열에서 고유 값을 선택하려면 어떻게합니까?

나는 4 개의 열 (이름, 성, 계정 번호 및 조직)이있는 단일 테이블 (MySQL에서)을 보유하고 있습니다. 내 프로그램에서 4 드롭 다운 (콤보 상자) (각 열에 하나씩)을 만들고 싶습니다. 콤보 상자에는 해당 열의 고유 한 값이 들어 있습니다. 지금 당장은 4 개의 별도 SQL 쿼리를 사용하고 각 콤보 상자를 채워서이 작업을 수행합니다. 나는 결과를 얻은 후에 모든 값을 얻은 다음 단일 콤보 상자로 분리하는 단일 쿼리를 수행하여 더 빠른 방법이 있는지 확인하려고했습니다. 하지만 하나의 쿼리로 어떻게하는지 알아낼 수 없으며, 책에서 모든 조인을 시도하고 파생 테이블과 내가 생각할 수있는 모든 것을 사용했지만 아무 것도 효과가 없었습니다.

기본적으로 내 이름 콤보 상자는 테이블의 모든 고유 한 첫 번째 이름을 포함해야하며 두 번째 콤보 상자는 고유 한 성, 세 번째 별개의 acct를 모두 포함해야합니다. 숫자 및 넷째로, 어떤 콤보 상자에서도 중복이없는 별개의 조직입니다.

이 경우 가능합니까? 감사. 당신이 여기서하고있는 것은 기본적으로 최적의 전략이다

Select distinct firstname from t1 order by firstname; 
' populate my combo box 

Select distinct lastname from t1 order by lastname; 
; populate my combo box 

etc... 
+0

난 당신이 하나의 쿼리에서 전체 데이터 세트를 반환하고 응용 프로그램 수준에서 디스플레이 로직을 처리 할 수있을 것 같아요. – Strawberry

답변

1

:

이 내가 현재하고있는 중이 것입니다. 이것은 SQL이 작동하는 방법입니다.

동시에 모든 firstnamelastname 항목을 동시에 나열하려고하면 출력이 어떻게 될지 고려하십시오. 6 개의 서로 다른 이름과 8 개의 별개의 성으로 몇 행을 얻을 수 있습니까? 6? 8? 48?

너무 느리면 DISTINCT 작업 자체가 더 빠르기 때문에 올바르게 수행해야 할 작업은 INDEX입니다.

+0

감사합니다. 모든 것이 적절하게 색인됩니다. 나는 테이블에 468,000 개의 엔트리가 있고 네 번 쿼리하기 때문에 하나의 쿼리에서 그것을 수행함으로써 약간의 속도를 얻을 수 있는지 알아보기 위해 노력했다. 인덱싱되었지만 4 개의 쿼리를 모두 실행하는 데 약 3 초가 걸립니다. – user2721815

+0

결과를 캐시해야하는 것처럼 들립니다. – tadman

관련 문제