2014-04-18 31 views
0

美好的一天。選擇替代選定結果的不同值

我正面臨一個mySql查詢的問題。假設我們有一個coulmn中值是對的表,但在同一領域的統一,所以這樣的事情:

id | serviceName 
----+------------- 
1 | foo - bar 
2 | foo - doo 
3 | foo - tep 
4 | bee - bar 
5 | bee - blo 

我想選擇不同的服務名的第一部分,在這種情況下, foo,蜜蜂。

所需的輸出應爲:

foo 
bee 
在結果

什麼我想現在的問題是一些關於製作SELECT DISTINCT a FROM REPLACE ((SELECT serviceName as a FROM tableName), ' - ***', '')

,但我真的不知道,如果它是可能的,以及如何做到這一點。我只想選擇該領域的第一部分,我只想採取它的獨特價值......這是可能的?我需要一個正確的方向指示,我可以通過我自己進行研究。

在此先感謝。

+0

顯示您所需的輸出 –

回答

1

假設你總是想劃破破折號-,這應該適合你。

SELECT DISTINCT LEFT(serviceName, LOCATE('-', serviceName) - 2) FROM tableName; 

SQLFiddle

+0

這也是一個很好的辦法,就是比其他解決方案的明顯更好? –

+1

@ MatteoBononi'peorthyr'從表現上看,沒有太大的/任何明顯的差異。雖然我相信如果你非常具體,'DISTINCT'可能會稍微快一點。這就是說,如果你想做一些事情來獲得每個第一部分匹配多少條目的計數,那麼你就需要使用'GROUP BY'。 –

1

這是你在看什麼呢?

select substring_index(serviceName,'-',1) as `first_part` 
from test 
group by `first_part` 

DEMO

+0

這真的令人敬畏,謝謝,我只是在考慮表現,這是否比一個獨特的更好? –

+1

以及你在這裏檢查一些優點和缺點,但對於小數據集無關緊要http://stackoverflow.com/questions/7943957/huge-performance-difference-when-using-group-by-vs-distinct –

+0

非常感謝,這是我正在尋找的東西,現在我遇到了難題,因爲它促進了答案:/ –