mysql选择更新

mysql选择更新,mysql,select,append,Mysql,Select,Append,得到这个: Table a ID RelatedBs 1 NULL 2 NULL Table b AID ID 1 1 1 2 1 3 2 4 2 5 2 6 表a需要有一个逗号分隔的列表,如表b所示。然后表b将被淘汰: Table a ID RelatedBs 1 1,2,3 2 4,5,6 这并没有贯穿所有记录,只是将一个“b”添加到“表a” UPDATE a, b SET relatedbs = CONCAT(relatedbs,',',b.id) W

得到这个:

Table a
ID RelatedBs
1  NULL
2  NULL

Table b
AID ID
1   1
1   2
1   3
2   4
2   5
2   6
表a需要有一个逗号分隔的列表,如表b所示。然后表b将被淘汰:

Table a
ID RelatedBs
1  1,2,3
2  4,5,6
这并没有贯穿所有记录,只是将一个“b”添加到“表a”

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

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

您必须使用mysql GROUP_CONCAT函数才能实现这一点:

您必须使用mysql GROUP_CONCAT函数才能实现这一点:

查看GROUP_CONCAT(expr)

调查小组(expr)


在标准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

如上所述。

在标准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

如上所述。

老实说,在管理数据库的方式上,这可能是一个糟糕的选择。并不是说你做不到,但是外键的概念是做你所拥有的,而不是你正在尝试做的。你的动机是什么?如果您需要获取
RelatedBs
并在SQL.True中使用它们,那么您的查询将非常复杂。但当它是一对多关系时,我仍然经常使用逗号分隔的ID。当它是一个多2多关系时,我总是使用mm表来处理这些关系。老实说,在管理数据库的方式上,这可能是一个糟糕的选择。并不是说你做不到,但是外键的概念是做你所拥有的,而不是你正在尝试做的。你的动机是什么?如果您需要获取
RelatedBs
并在SQL.True中使用它们,那么您的查询将非常复杂。但当它是一对多关系时,我仍然经常使用逗号分隔的ID。当它是一个多2多关系时,我总是使用mm表来处理这些关系。