从相同的 table 中获取两个值

Get two values ​from the same table

我有一个名为 Register

的 table

ID,Type_status,状态,描述

示例:

ID      Type_status   Status    Description
1       8000          8017      test

我有一个名为 History 的 table,其结构如下

Id, Id_Register, History_status, Payload

例子

Id      Id_Register   History_status    Payload
1       1             8015              {"name": "test"}
2       1             8016              {"token": "example"} 
3       1             8017              {"email": "test@test.com"}

我需要的是能够执行一个查询,当 Id_Register = 1 History_status80158017History_status 8017 是 email = test@test.com

预期的结果是

Id_Register      Name    Token
1                test.   example   

我需要获取在 8017 状态下作为电子邮件的记录的所有名称和标记 test@test.com

提到我已经解决了json中文本的比较,我无法实现的是根据状态获取相同table的两个值的查询我提一下。

JSON_VALUE(cast(Payload as nvarchar(max)), '$.email') LIKE '%test@test.com%'

也许 SQL 服务器手册中的这个条目可以帮助您,这个条目向您展示了如何从 JSON 列中获取标量值,因此您只能从json 并在您的 where 子句中使用它进行过滤。这个问题的最佳标题是如何从 json 列中获取特定条目,诸如此类。

https://docs.microsoft.com/pt-br/sql/t-sql/functions/json-value-transact-sql?view=sql-server-ver15

您只需使用 table 注册加入两次 table 历史。第一个连接将为您提供名称,第二个连接将为您提供令牌。为了区分每个人,您使用别名。

select R.Id, 
       json_value(N.Payload, '$.Name') as Name, 
       json_value(T.Payload, '$.Token') as Token
from Register as R
     left join History as N on N.Id_Register = R.Id and 
                               substring(N.Payload, 1, 8) = '{"Name":'
     left join History as T on T.Id_Register = R.Id and 
                               substring(T.Payload, 1, 9) = '{"Token":'