我有一张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
以及 Payload
当 Id_Register = 1
以及 History_status
是 8015
以及 8017
与 History_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%'
2条答案
按热度按时间kokeuurv1#
只需将表历史与表寄存器联接两次。第一个连接将获得名称,第二个连接将获得令牌。为了区分每一个你使用别名。
laawzig22#
也许SQLServer手册中的这个条目可以帮助您,这个条目向您展示了如何从json列中获取标量值,这样您就只能从json中获取电子邮件地址,并在where子句中使用它进行过滤。这个问题最好的标题是如何从json列中获取特定的条目,诸如此类。
https://docs.microsoft.com/pt-br/sql/t-sql/functions/json-value-transact-sql?view=sql-server-ver15