2016-02-25 27 views
0

在MySQL加後,在MySQL

select various(functions(here(...))) foo, count(*) ct 
from table 
group by foo 
having ct > 1; 

看起來重複數據刪除一切,我有一個查詢。我想更改查詢以從foo刪除加號和其後的任何內容,以便如果various(functions(here(...)))得到foo+bar我只得到foo。 (如果沒有出現加號,則保持不變。)

這樣做的最佳方法是什麼?我可以使用replace

select if(locate("+", various(functions(here(...))))>0, left(various(functions(here(...))), locate("+", various(functions(here(...)))) - 1), various(functions(here(...)))) foo, count(*) ct 
from table 
where conditions 
group by foo 
having ct > 1; 

但這似乎是'顯然'是錯誤的東西。正則表達式會很好,但據我所知,它們在MySQL中不存在。子查詢使這個幾乎沒有笨重

select if(locate("+", bar)>0, left(bar, locate("+", bar)-1), bar) foo 
from table 
left join (
    select pkey, various(functions(here(...))) bar 
    from table 
    where conditions 
) subtable using(pkey) 
group by foo 
having ct > 1 
; 

但表很大,我想知道如果有一個更有效或更多維護的解決方案。

回答

1

使用substring_index()

select substring_index(various(functions(here(...))), '+', 1) as foo, count(*) ct 
from table 
group by foo 
having ct > 1; 
+0

這麼簡單!抱歉,我錯過了這個。 – Charles