仅从Sql数据库中获取唯一结果

时间:2015-12-13 11:28:03

标签: mysql sql distinct

数据库表

    ID      Post                Tags
    1       Range rover         range-rover,cars
    2       Lamborghini         lamborghini,cars
    3       Kawasaki            kawasaki,bikes
    4       Yamaha R1           yamaha,r1,bikes

我想从Result sql中删除重复值

当我从数据库

获取标签(标签所在)时,我得到了什么
SELECT Tags from posts; 

Resut:

range-rover,cars lamborghini,cars kawasaki,bikes yamaha,r1,bikes

我需要的是不再显示相同的结果。

range-rover,cars lamborghini kawasaki,bikes yamaha,r1

1 个答案:

答案 0 :(得分:3)

您可以使用计数表和SUBSTRING_INDEX分割文本:

SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(t.tags, ',', n.n), ',', -1) AS val
FROM posts t 
CROSS JOIN 
(
   SELECT a.N + b.N * 10 + 1 n
     FROM 
    (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
   ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
) n
 WHERE n.n <= 1 + (LENGTH(t.tags) - LENGTH(REPLACE(t.tags, ',', '')))

SqlFiddleDemo

如果您需要一行添加GROUP_CONCAT

SELECT GROUP_CONCAT(DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(t.tags, ',', n.n), ',', -1)) AS val
...

SqlFiddleDemo2