从另一个表更新mysql表的值

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

我有下列表格 MySQL 代理人

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

类型

Type      Name
--------------------------
1         Gold
2         Platinum
3         Silver
4         Supreme

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

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

ygya80vv

ygya80vv1#

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

SELECT
A.Agent,
GROUP_CONCAT(T.Name) as Type
FROM Agent AS A
INNER JOIN Type AS T ON T.Type=A.Type
GROUP BY A.Agent

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

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

zujrkrfu2#

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

SELECT agent, GROUP_CONCAT(name ORDER BY name) 
as type
FROM (
    SELECT
  agent.agent,
  type.name
FROM
  (SELECT 1 as n 
   UNION ALL SELECT 2
   UNION ALL SELECT 3 
   UNION ALL SELECT 4
   UNION ALL SELECT 5) numbers 
INNER JOIN agent
ON CHAR_LENGTH(agent.type)- 
CHAR_LENGTH(REPLACE(agent.type, ',', ''))>=numbers.n-1
INNER JOIN type 
ON type.type = 
SUBSTRING_INDEX(SUBSTRING_INDEX(agent.type, ',', numbers.n), ',', -1)
      ) tab
GROUP BY agent
ORDER BY agent;

相关问题