2011-01-25 3 views
2

아래에서이 쿼리를 수행 할 수 있습니까? 것이다 (내 의도가있다)Select Query에 문자열을 포함하십시오.

SELECT America, England, DISTINCT (country) FROM tb_country 

디스플레이 :

America 
England 
(List of distinct country field in tb_country) 

그래서 요점은 DISTINCT 국가 필드는 아무 것도 반환하지 않는 경우에도 (예를 들어)를 표시하는 미국과 영국에있다. 기본적으로이 쿼리는 select 드롭 다운 목록을 표시하고 사용자가 선택할 수있는 고정 값을 제공합니다. 원하는대로 새 국가를 추가 할 수 있습니다.

tb_country의 한 행에 America 또는 England 값이 있으면 쿼리 결과에 중복으로 표시되지 않습니다. tb_country 값의 목록이 그래서 경우 :

Germany 
England 
Holland 

쿼리만이 출력 : 당신은 UNION 사용할 필요가

America 
England 
Germany 
Holland 

답변

7

:

SELECT 'America' AS country 
UNION 
SELECT 'England' AS country 
UNION 
SELECT DISTINCT(c.country) AS country 
    FROM TB_COUNTRY c 
을 UNION 중복을 제거합니다

; UNION ALL은 그렇지 않습니다 (그러나 더 빠릅니다).

데이터 유형은 SELECT 절의 각 순서 위치와 일치해야합니다. 즉, 첫 번째 쿼리의 첫 번째 열이 INT 인 경우 이후의 모든 통합 문에 대한 첫 번째 열은 INT이거나 NULL이어야합니다. 한 번 수행

: 당신이 tb_country에 무게 열을 추가하고 주문 절을 사용하지 않는 이유는

+0

다른 방법이 있습니까? 이 방법으로 10-20 개의 고정 값을 나열해야하는 경우 쿼리가 매우 길어집니다. 다른 방법이 없다면, 나는 너의 제안을 사용할거야. 감사합니다 – Henson

+0

@Henson :이 상황에 가장 적합한 옵션은 국가의 고유 한 목록을 보유하고있는 국가 테이블을 갖는 것입니다. 그런 다음 다른 테이블의 국가 정보가 필요한 경우 country_id와 같은 기본 키를 참조하십시오. –

+0

그래, 나도 보통 그렇게 해. 그러나 클라이언트는 이런 식으로 주장합니다. (이상한 ... – Henson

0

update country set weight = 1 where country = 'England'; 
update country set weight = 1 where country = 'America'; 

그런 다음 그것을 사용 :

select distinct(country) from tb_country order by desc weight ; 

또 다른 방법은 사용하는 것입니다 두 개의 열 (국가, 가중치) 및 외부 조인이있는 추가 국가 테이블.

Personnaly 나는 country 필드에 대해 UNIQUE 제약 조건이있는 country 테이블을 선호하며 외래 키 사용.

관련 문제