2014-01-20 2 views
-2

불필요한 데이터를 제거하기 위해 필자의 쿼리 (결과가 아님)를 최적화하고 필요시 읽기 쉽도록 업데이트하고 싶습니다.MySQL 유니온 모두 중복 제거

테이블 : 그것은 여러 번 기록 된대로이 경우 A는, 내 쿼리에서 중복

SELECT A, B FROM TABLE 
UNION ALL 
SELECT A, C FROM TABLE 
UNION ALL 
SELECT A, 'string' FROM TABLE; 

에서 :

A, B, C 
1 B1 1.99 
2 B2 6.99 
3 B3 7.99 

내가처럼 보이는 쿼리가 있습니다. 이 쿼리를 한 번만 만들려면 어떻게해야합니까? 감사.

EDIT : 정확히 같은 결과를 보려면 SQL 코드에서 한 번만 열 A를 참조하고 싶습니다.

+0

단일 열에 값이 중복되는 행을 하나만 유지하고 싶습니까? 그렇다면 어떤 행을 보관하고 싶습니까? –

+0

이 점을 더 잘 설명해야합니다. 쿼리를 최적화하고 싶습니다. 따라서 실제 쿼리에는 A.에 대한 하나의 참조 만 포함되어 있습니다. 필자의 예제에서는 쿼리에서 얻은 결과와 동일한 결과를 원합니다. – user2245191

+1

질문을 편집하여 원하는 결과를 얻으십시오. –

답변

0

다음 코드 :

SELECT A, B FROM TABLE 
UNION ALL 
SELECT A, C FROM TABLE 
UNION ALL 
SELECT A, 'string' FROM TABLE; 

table 세 번에서 읽습니다. 그것은 실제로 최적화 할 수 있습니다 :

select A, 
     (case when n = 1 then B 
      when n = 2 then C 
      when n = 3 then 'string' 
     end) as B 
from TABLE cross join 
    (select 1 as n union all select 2 union all select 3) n; 

는 SQL 엔진은 일반적으로 n의 3 행을 반복,이 쿼리에 대해 한 번만 TABLE를 스캔 할 것입니다. 이것은 성능 향상 일 수 있습니다.