获取两个值​从同一张table

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

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

  1. ID Type_status Status Description
  2. 1 8000 8017 test

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

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

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

  1. Id_Register Name Token
  2. 1 test. example

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

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

kokeuurv1#

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

  1. select R.Id,
  2. json_value(N.Payload, '$.Name') as Name,
  3. json_value(T.Payload, '$.Token') as Token
  4. from Register as R
  5. left join History as N on N.Id_Register = R.Id and
  6. substring(N.Payload, 1, 8) = '{"Name":'
  7. left join History as T on T.Id_Register = R.Id and
  8. 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

相关问题