从相同的 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_status
是 8015
和 8017
与 History_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":'
我有一个名为 Register
的 tableID,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_status
是 8015
和 8017
与 History_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":'