2012-06-01 4 views
2

타사 피드의 수천 개의 회사 이름이 포함 된 자동화 된 프로세스로 채워진 테이블이 있습니다. 회사 이름의 대부분은 이름이지만 일부 회사 이름 뒤에 하이픈이 있습니다. 회사 이름 만 반환 할 선택을하려고합니다. 첫 번째 쿼리가 나에게 모든 것을 제공문자가있는 경우에만 MySQL 하위 문자열 선택

SELECT DISTINCT vendor FROM feed_data; 
SELECT DISTINCT SUBSTRING(vendor, 1, LOCATE(' - ', vendor)) FROM feed_data; 

, 두 번째 쿼리는 나에게 하이픈이 회사 이름을 제공합니다 : 지금은 두 개의 쿼리가 있습니다. 나는 둘 다 얻을 수있는 방법을 찾고 있습니다.

샘플 데이터 : 즉, 가능한 솔루션을 제한 할 수 있도록

vendor: 
American Widgets 
Bravo Widgets - The best widgets money can buy 

또한,이 쿼리는 실제로 메뉴를 채우고 큰 질의의 서브 쿼리의 일부이다.

답변

4

사용이 쿼리 :

이 같은
+0

완벽한! 간단하고 직선적이며 매력처럼 작동합니다! 감사! – Wige

0

사용 노조 - 각 반에 대한 하나 개의 쿼리 :

SELECT DISTINCT 
    SUBSTRING(vendor, 1, LOCATE(' - ', vendor)) 
FROM feed_data 
where vendor like '%-%' 
union 
SELECT DISTINCT 
    vendor 
FROM feed_data 
where vendor not like '%-%'; 

또는 if() 사용

SELECT DISTINCT 
    if (vendor like '%-%', SUBSTRING(vendor, 1, LOCATE(' - ', vendor)), vendor) 
FROM feed_data; 

또는 사용 case :

SELECT DISTINCT 
    case 
     when vendor like '%-%' then SUBSTRING(vendor, 1, LOCATE(' - ', vendor)) 
     else vendor 
    end 
FROM feed_data; 
0

뭔가 (그것이 하이픈의 여부 언급 당신에게 추가 필드의 모든 공급 업체를 줄 것이다)

SELECT distinct vendor, 
(case when LOCATE('-', vendor) >= 0 
then 'True' 
else 'False' end) as IsVendorWithHiphen 
FROM feed_data; 

이 하나는 당신에게 교체 - 모든 공급 업체의 결과를 줄 것이다 될 수있다 어디든

select distinct 
(case when LOCATE('-', vendor) >= 0 then SUBSTRING(vendor, 1, LOCATE(' - ', vendor)) 
else vendor) as myvendor from feed_data;