【问题标题】:How to Inner Join two Tables based on 2 JSON object columns?如何基于 2 个 JSON 对象列内部连接两个表?
【发布时间】:2020-05-10 01:26:44
【问题描述】:

我有两个表:all_UnitData 和 all_TrooperData,每个表有 2 列。一个是 Varchar 列,另一个是 JSON 对象。我附上了两张表。 PS:我将行数限制为 5。 我想组合这两个表(内连接),唯一的共同值是 JSON 对象(STUID)中的值之一。如何使用 JSON 对象值对这两个表进行内部连接?

这是我的查询:

 Select JSON_Extract(TrooperInfo,'$.A') as 'STID', JSON_Extract(TrooperInfo,'$.B') as 'Rank', 
 JSON_Extract(TrooperInfo,'$.J') as 'Role', JSON_Extract(TrooperInfo,'$.G') as 'Category',
 JSON_Extract(TrooperInfo,'$.E') as 'Height', JSON_Extract(TrooperInfo,'$.F') as 'Weight', 
 JSON_Extract(TrooperInfo,'$.C') as 'Gender', JSON_Extract(TrooperInfo,'$.H') as 'Status', 
 JSON_Extract(TrooperInfo,'$.I') as 'STUID',
 JSON_Extract(STUnitInfo,'$.A') as 'BGID', JSON_Extract(STUnitInfo,'$.B') as 'Designation', 
 JSON_Extract(STUnitInfo,'$.E') as 'STUID2'
 **FROM all_TrooperData INNER JOIN all_UnitData ON concat(all_UnitData,'.',JSSTUID = all_TrooperData.STID**

(这是我有问题的地方)

【问题讨论】:

    标签: mysql sql json join select


    【解决方案1】:

    我认为你想要:

    SELECT 
        td.TrooperInfo ->> '$.A' as STID, 
        td.TrooperInfo ->> '$.B' as Rank, 
        td.TrooperInfo ->> '$.J' as Role, 
        td.TrooperInfo ->> '$.G' as Category,
        td.TrooperInfo ->> '$.E' as Height,
        td.TrooperInfo ->> '$.F' as Weight,
        td.TrooperInfo ->> '$.C' as Gender,
        td.TrooperInfo ->> '$.H' as Status,
        td.TrooperInfo ->> '$.I' as STUID,
        ud.STUnitInfo  ->> '$.A' as BGID,
        ud.STUnitInfo  ->> '$.B' as Designation,
        ud.STUnitInfo  ->> '$.E' as STUID2
    FROM all_TrooperData td
    INNER JOIN all_UnitData ud 
        ON ud.STUnitInfo ->> '$.E' = td.TrooperInfo ->> '$.I'
    

    注意事项:

    • ->> 运算符缩短了查询 - 它正确地取消引用 JSON 值,这可能是您想要的

    • 表别名使查询更易于读写

    • 不要用单引号括住列别名 - 它们是用于文字刺痛

    【讨论】:

    • 谢谢你..这工作!请问我们是否可以使用 JSON_Extract(TrooperInfo,'$.C') 语法而不是 td.TrooperInfo ->> '$.C' 语法来做同样的练习。只是想确定我的语法是否错误,或者是否可以通过 JSON_Extract(TrooperInfo,'$.C') 语法解决相同的问题。我尝试使用此语法,但出现错误。你能帮我看看如何使用 JSON_Extract 语法解决这个问题吗?
    • @Roger:它应该也适用于JSON_EXTRACT()。请注意,用JSON_UNQUOTE() 包围JSON_EXTRACT() 会更干净,因此值不会被正确引用。
    • @GMB- JSON Extract 的语法看起来如何?是:td.JSON_Extract(TrooperInfo,'$.A') as STID 吗?
    • @Roger: 不,JSON_EXTRACT(td.TrooperInfo, '$.A')(表别名在列名前面)。或者更好:JSON_UNQUOTE(JSON_EXTRACT(td.TrooperInfo, '$.A')).
    猜你喜欢
    • 2019-05-30
    • 2016-09-08
    • 2020-03-27
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多