【问题标题】:Update column values with dynamically created JSON MySql使用动态创建的 JSON MySql 更新列值
【发布时间】:2021-02-23 22:17:28
【问题描述】:

我有一个类似这样的Relationships

ID | FromID | ToID | JsonPair
1      10      8       null
2      11      13      null
3      15      21      null
4      26      22      null

还有两张表FromTo

FromID | FromName                   ToID | ToName
  1        'A'                       1      'Z'                 
  2        'B'                       2      'Y' 
 ...                                ...
  10       'E'                       8      'M'                        
  11       'I'                      ...
 ...                                 13     'N'                        
  15       'O'                      ...
 ...                                 21     'F'                        
  26       'U'                       22     'H' 
                                     

我正在尝试使用 {FromName: ToName} 形式的 Json 对象更新 JsonPair 列。所以结果表看起来像

ID | FromID | ToID | JsonPair
1      10      8     {'E':'M'}
2      11      13    {'I':'N'}
3      15      21    {'O':'F'}
4      26      22    {'U':'H'}

我是 SQL 新手。我在想我应该先SELECT 的名字,然后使用结果放入UPDATE 语句。

到目前为止,我得到了这个返回 FromName 和 ToName

SELECT F.FromName FROM Relationships AS R
JOIN From as F
ON R.FromID = F.FromID

SELECT T.ToName FROM Relationships AS R
JOIN To as T
ON R.FromID = T.FromID;

那我觉得应该用这个结果来做

UPDATE Relationships
SET JsonPair = (combine result above and format to json)
WHERE JsonPair IS NULL;

我被困在合并和格式化步骤上。请问我可以得到帮助吗?

我正在使用MySql

【问题讨论】:

    标签: mysql sql json sql-update inner-join


    【解决方案1】:

    您可以使用更新/加入语法以及json_object()

    考虑:

    update relationships r
    inner join t_from f on f.fromid = r.fromid
    inner join t_to   t on t.to_id  = r.to_id
    set r.jsonpair = json_object(f.fromname, t.toname)
    

    注意:fromtoreserved words in MySQL,因此表名的选择不好。我在查询中将它们重命名为 t_fromt_to

    【讨论】:

    • 谢谢!是的,在我的项目中,它们的名称不同,所以这应该不是问题,但我也不知道。
    猜你喜欢
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    相关资源
    最近更新 更多