【问题标题】:Joining tables in MYSQL without a common column在没有公共列的情况下连接 MYSQL 中的表
【发布时间】:2020-10-12 01:11:01
【问题描述】:

我已经在 Internet 上搜索了有关如何在 MYSQL 中加入两个表而没有公共列的答案,但没有找到我正在寻找的确切内容。所以我有两个表,如下所示。

TABLE 用户详情

id empID   Name
1   001    Rhonda

表请求

id ticketNo  Details
1  00000123  {"userDetails":{"id":"1", "empID":"001", "Name":"Rhonda"}

现在我想做的是编写一个查询,当我搜索 empId:001 时,我希望该表返回该特定 EMPID 的票号。但是这里的问题是没有公共列,其次是表请求中该用户的详细信息在列 details 下。我对如何实现这一目标感到困惑。如果有人可以提供帮助,那将是很大的帮助。提前致谢。

【问题讨论】:

    标签: mysql sql json mysql-8.0


    【解决方案1】:

    在修复 JSON 列格式后,您可以在 JOIN 条件中使用 ->> 运算符,例如 将其转换为 {"userDetails":{"id":"1", "empID":"001", "Name":"Rhonda"}} 的形式:

    SELECT ticketNo 
      FROM request r
      JOIN userDetails u
        ON r.Details ->> '$.userDetails.empID' = u.empID
    

    Demo

    更新:也许,您可以尝试将 u.empID 替换为 CONVERT(u.empID USING utf8)CONVERT(u.empID USING latin1) 以获取正确的排序规则

    【讨论】:

    • 嗨,我在帖子中没有提到但 Json 列格式是 {"userDetails":{"id":"1", "empID":"001", "Name" :"朗达"} 已经。我也尝试了您的解决方案,但它引发了错误。错误是:错误代码:1267。操作“=”的排序规则(utf8mb4_bin,COERCIBLE)和(latin1_swedish_ci,IMPLICIT)的非法混合
    • 不客气@Alisa。 $ 符号表示从 JSON 文档的顶层开始搜索,其中的点表示每个键的步骤。你可以refer.
    • 非常感谢。它现在工作得很好! @巴巴罗斯
    猜你喜欢
    • 1970-01-01
    • 2021-12-07
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    相关资源
    最近更新 更多