2016-05-14 121 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看到的结果