从另一个表更新mysql表的值

mmvthczy  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(358)

我有下列表格 MySQL 代理人

  1. Agent Type
  2. --------------------------
  3. Bob 1,2,3,4
  4. Sam 2,3,4

类型

  1. Type Name
  2. --------------------------
  3. 1 Gold
  4. 2 Platinum
  5. 3 Silver
  6. 4 Supreme

我的问题是如何使用 select statement ```
Agent Type

Bob Gold, Platinum, Silver, Supreme
Sam Platinum, Silver, Supreme

ygya80vv

ygya80vv1#

正如上面提到的,您应该转换代理表,以便type列不是逗号分隔的字符串,您希望每个数字有一行,因此在本例中,代理表将有七行长,您的查询将很简单,例如。

  1. SELECT
  2. A.Agent,
  3. GROUP_CONCAT(T.Name) as Type
  4. FROM Agent AS A
  5. INNER JOIN Type AS T ON T.Type=A.Type
  6. GROUP BY A.Agent

而在当前状态下,可以使用replace代替join:

  1. SELECT
  2. Agent
  3. ,REPLACE(REPLACE(REPLACE(REPLACE(type,'1','Gold'),'2','Platinum'),'3','Silver'),'4','Supreme') as Type
  4. FROM Agent
zujrkrfu

zujrkrfu2#

这将把数组拆分成行,然后使用groupconcat将其放回数组中。如果agent.type列中最长的数组中有>5个值,则需要缩小此查询的大小以增加表号。

  1. SELECT agent, GROUP_CONCAT(name ORDER BY name)
  2. as type
  3. FROM (
  4. SELECT
  5. agent.agent,
  6. type.name
  7. FROM
  8. (SELECT 1 as n
  9. UNION ALL SELECT 2
  10. UNION ALL SELECT 3
  11. UNION ALL SELECT 4
  12. UNION ALL SELECT 5) numbers
  13. INNER JOIN agent
  14. ON CHAR_LENGTH(agent.type)-
  15. CHAR_LENGTH(REPLACE(agent.type, ',', ''))>=numbers.n-1
  16. INNER JOIN type
  17. ON type.type =
  18. SUBSTRING_INDEX(SUBSTRING_INDEX(agent.type, ',', numbers.n), ',', -1)
  19. ) tab
  20. GROUP BY agent
  21. ORDER BY agent;
展开查看全部

相关问题