2010-03-23 58 views
0

得到这个:MySQL的选择更新

Table a 
ID RelatedBs 
1 NULL 
2 NULL 

Table b 
AID ID 
1 1 
1 2 
1 3 
2 4 
2 5 
2 6 

需要一个表有一个逗号分隔的列表如表B中给出。然后,B表将变得过时:

Table a 
ID RelatedBs 
1 1,2,3 
2 4,5,6 

这确实通过所有记录不RUND,只是广告一个“B”到“表”

UPDATE a, b 
SET relatedbs = CONCAT(relatedbs,',',b.id) 
WHERE a.id = b.aid 

更新:谢谢,3个正确答案(标记为最老的答案)! GROUP_CONCAT是一个使用。无需在使用relatedids = = CONCAT(relatedids,',',next_id)的ID之间插入逗号,这是由GROUP_CONCAT自动完成的。

+1

说实话,这可能是您管理数据库的一种糟糕的选择。不是说你不能这样做,但外键的想法是做你所拥有的,而不是你想要做的。 你的动机是什么?如果您需要获取'RelatedBs'并在SQL中使用它们,那么您的查询将显得更加复杂。 – 2010-03-23 11:16:42

+0

确实如此。但是,当它是一对多关系时,我仍然经常使用逗号分隔的ID。当它是一个多关系时,我总是用一个毫米表来处理关系。 – Tillebeck 2010-03-24 07:12:11

回答

1

查找到GROUP_CONCAT(表达式)

mysql> SELECT student_name, 
    ->  GROUP_CONCAT(DISTINCT test_score 
    ->      ORDER BY test_score DESC SEPARATOR " ") 
    ->  FROM student 
    ->  GROUP BY student_name; 
1

你不能这样做,在标准的SQL。你可以写一个存储过程来做到这一点。我有一个类似的问题,但我使用PostgreSQL所以我可以通过编写自定义聚合函数来解决它,这样你可以做查询,如

select aid, concat(id) 
from b group by 
aid 

更新:MySQL有一个GROUP_CONCAT聚合函数,所以你可以做像

SELECT id,GROUP_CONCAT(client_id) FROM services WHERE id = 3 GROUP BY id 

所概述here