2014-11-24 3 views
0

내가MySQL의 쿼리는

id | primary_address_street | alt_address_street 

1 | 300,Main Street  | 300,Main Street 
2 | 46,Glen Rd    | NULL 
3 | 33 St George's Road | 33 St George's Road 
4 | 33 St George's Road | 39 St Martins Road 
5 | 37 St Martins Road  | 300,Main Street 

은 내가 하나의 열로 모두 거리를 필요로하지만, primary_address_street 다음 alt_street_address 같은 경우는 내가 그 값의 하나를 필요로 출력 예를 아래에 필요한 아래의 데이터 테이블의 연락처가 주소를 얻을 수 예 : ID 1 & 3 모두 열은 같은 값을 가지고 있고 그 경우에 나는 한 번만 해당 항목이 필요

aid | address  
1 | 300,Main Street 
2 | 46,Glen Rd 
3 | 33 St George's Road 
4 | 33 St George's Road 
4 | 39 St Martins Road 
5 | 37 St Martins Road  
5 | 300,Main Street 

현재 내 SQL 쿼리는 같은

다음 0
select primary_address_street as address from contacts 
UNION ALL 
select alt_address_street as address from contacts 

이 결과는 어떻게 얻을 수 있습니까?

+1

'ALL'키워드를 제거하면 중복을 제거하는 _distinct_가됩니다. 그러나 쿼리에서'id' 열을 선택하지 않으므로 정확히 무엇이 "복제본"으로 간주되는지 모르겠습니다. –

+0

중복 된 주소 필드는 기본 주소와 대체 주소 필드 값이 단일 레코드에서 동일한 경우에만 존재합니다. –

답변

1

하나의 옵션은 alt_address가 primary_address_street와 일치하는 행을 생략하기 위해 쿼리 중 하나에 조건자를 추가하는 것입니다.

예를 들어, 쿼리의 마지막에 이런 식으로 뭔가를 추가 : 기존 쿼리에 그를 추가

WHERE NOT (alt_address_street <=> primary_address_street) 

제공 :

select primary_address_street as address from contacts 
UNION ALL 
select alt_address_street as address from contacts 
    WHERE NOT (alt_address_street <=> primary_address_street) 

첫 번째 선택 반환 모든 행을, 두 번째 선택 alt_address_street가 다른 행만 반환합니다. MySQL 관련 Null 안전 비교 연산자가 사용됩니다. NULL 값을 처리하는 방법에 따라 간단한 비항 등 비교를 사용할 수 있습니다.

WHERE alt_address_street <> primary_address_street 
+0

감사합니다 스펜서! 완벽하게 작동했습니다! –

0

당신이 시도 할 수 :

SELECT primary_address_street AS address FROM contacts 
    UNION ALL 
SELECT alt_address_street AS contacts FROM table WHERE primary_address_street <> alt_address_street 

나는 이것이 당신이 원하는 것을 생각한다.

당신은 당신이 원하는 결과에 표시하고 있지만 조회에서, 다음은 쉽게 무엇 이는 id 열을 유지하려면 :

SELECT id AS aid, primary_address_street AS address FROM contacts 
    UNION 
SELECT id AS aid, alt_address_street AS address FROM contacts 
    WHERE alt_address_street IS NOT NULL 

이 이미 가지고있는 본질적이지만, id을 포함하고 ALL 키워드를 제거하십시오. 즉, 중복이 제거됩니다. id이 거기에 있으면 두 개의 주소 입력란이 동일 할 때만 중복 주소가 나타납니다. 나는 또한 다르게 나타나게 될 NULL을 제거하기 위해 뭔가를 추가했습니다.