获取两个值​从同一张table

8dtrkrch  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(250)

我有一张table叫register
id,类型\状态,状态,描述
例子:

ID      Type_status   Status    Description
1       8000          8017      test

我有一个名为history的表,其结构如下
id、id\寄存器、历史\状态、有效负载
例子

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

我需要的是能够执行一个查询,它将为我带来 Record_Id 以及 PayloadId_Register = 1 以及 History_status8015 以及 8017History_status 8017是 email = test@test.com 预期结果是

Id_Register      Name    Token
1                test.   example

我需要得到所有的名称和令牌的记录,在8017州有作为电子邮件 test@test.com 提到我已经解决了json中文本的比较问题,但我无法实现的是根据我提到的状态查询同一个表的两个值。

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

kokeuurv1#

只需将表历史与表寄存器联接两次。第一个连接将获得名称,第二个连接将获得令牌。为了区分每一个你使用别名。

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":'
laawzig2

laawzig22#

也许SQLServer手册中的这个条目可以帮助您,这个条目向您展示了如何从json列中获取标量值,这样您就只能从json中获取电子邮件地址,并在where子句中使用它进行过滤。这个问题最好的标题是如何从json列中获取特定的条目,诸如此类。
https://docs.microsoft.com/pt-br/sql/t-sql/functions/json-value-transact-sql?view=sql-server-ver15

相关问题