2016-05-14 65 views
1

它們的值我有一個包含學校和名稱列表的數據庫表:查找重複和合並在SQL

 
school name point 
------------------------ 
first  dani good 
first  dani precise 
third  John nice 
first  dani pro 
third  John cute 

我想對每所學校/名稱組合只是一個記錄結束和合並點值是這樣的:

 
school name point 
-------------------------------------- 
first  dani good and precise and pro 
third  John cute and nice 
+1

見GROUP_CONCAT – Strawberry

+0

做你想要一個實際的新表,其中的數據是格式化的,或者你只是需要它在你的PHP代碼中使用某種數組? – Pevara

+0

我想刪除重複項,並保持一行此更新 – Ricardo

回答

3

您可以使用GROUP_CONCAT這樣得到的結果:

SELECT school, name, GROUP_CONCAT(point SEPARATOR ' and ') points 
FROM table 
GROUP BY school, name 

如果沒關係,並且您想用結果替換實際的表格,例如 會創建另一個名稱爲tmptable的表格。

INSERT INTO tmptable 
SELECT school, name, GROUP_CONCAT(point SEPARATOR ' and ') points 
FROM table 
GROUP BY school, name; 

DROP TABLE table; 
RENAME TABLE tmptable TO table; 

在這裏,你看到的結果是在sqlfiddle

+0

不起作用,你的代碼工作,如果學校的價值和名稱值是相同的,但在我的表中有不同的值 – Ricardo

+2

我不這麼認爲...你測試過嗎? – ebahi

+0

是的...我測試了它,發現學校和名稱相同的值,在我的表中這個值不同 – Ricardo

1

這裏是一個示例即會爲你工作

和一個新的使用DISTINCT

SELECT 
    school, 
    `name`, 
    GROUP_CONCAT(`point` SEPARATOR ' and ') 
FROM (SELECT DISTINCT school,`name`, `point` FROM groupme) AS result 
GROUP BY school,`NAME`; 

SELECT 
    school, 
    `name`, 
    GROUP_CONCAT(`point` SEPARATOR ' and ') 
FROM groupme 
GROUP BY school,`name`; 

樣品

MariaDB [mysql]> select * from groupme; 
+----+--------+------+---------+ 
| id | school | name | point | 
+----+--------+------+---------+ 
| 1 | first | dani | good | 
| 2 | first | dani | precise | 
| 3 | third | John | nice | 
| 4 | first | dani | pro  | 
| 5 | third | John | cute | 
+----+--------+------+---------+ 
5 rows in set (0.01 sec) 

MariaDB [mysql]> SELECT school, `name` , GROUP_CONCAT(`point` SEPARATOR ' and ') 
    -> FROM groupme 
    -> GROUP BY school,`name`; 
+--------+------+------------------------------------------+ 
| school | name | GROUP_CONCAT(`point` SEPARATOR ' and ') | 
+--------+------+------------------------------------------+ 
| first | dani | good and precise and pro     | 
| third | John | nice and cute       | 
+--------+------+------------------------------------------+ 
2 rows in set (0.00 sec) 

MariaDB [mysql]> 
+0

找到學校和名稱相同的行,在我的表中這個值是不同的 – Ricardo

+0

我不明白,你有沒有測試過,發表你的表 –

+0

我已經添加了一個帶有DISTINCT的SQL,所以每個點只有一次結果 –

1

使用@ ebahi的回答是:

更改成@fuzzytree提到查詢:

SELECT school, name, GROUP_CONCAT(distinct point SEPARATOR ' and ') points 
FROM table 
GROUP BY school, name 

sqlfiddle看到的結果