[英]Join a query with CROSS APPLY FOR JSON PATH
I have two SQL Server tables ApplicationRoles
and commonformsschema
.我有两个 SQL Server 表
ApplicationRoles
和commonformsschema
。 Applying a join between both table based on SchemaId
column.基于
SchemaId
列在两个表之间应用连接。
But FOR JSON PATH
column name as roles
results getting wrong.但是
FOR JSON PATH
列名作为roles
结果出错。
Here is the select query:这是选择查询:
SELECT
fs1.SchemaId, JSON_QUERY(ar.newJson) as roles
FROM
commonformsschema fs1
JOIN
ApplicationRoles ar1 on ar1.SchemaId = fs1.SchemaId
CROSS APPLY
(SELECT
(SELECT
RoleName AS [role],
[create] AS [permissions.create],
[read] AS [permissions.read],
[update] AS [permissions.update],
[delete] AS [permissions.delete]
FROM
ApplicationRoles ar
WHERE
fs1.SchemaId = ar1.SchemaId
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER) AS newJson) ar
WHERE
fs1.Tenant IN ('test', 'All')
AND ar1.RoleName IN ('Project Manager', 'Read')
For the full table details,input please see the db fiddler .有关完整的表详细信息,请输入db fiddler 。
Current result:当前结果:
SchemaId![]() |
roles![]() |
---|---|
7a9a2521-45fb-4c9d-b7d9-e41927118119 ![]() |
{"role":"Senior Construction Manager","permissions":{"create":true,"read":true,"update":true,"delete":true}} ![]() |
ca5d8707-fee8-4a5b-ad61-813785e32575 ![]() |
{"role":"Senior Construction Manager","permissions":{"create":true,"read":true,"update":true,"delete":true}} ![]() |
Expected result:预期结果:
SchemaId![]() |
roles![]() |
---|---|
7a9a2521-45fb-4c9d-b7d9-e41927118119 ![]() |
{"role":"Project Manager","permissions":{"create":true,"read":true,"update":false,"delete":true}} ![]() |
ca5d8707-fee8-4a5b-ad61-813785e32575 ![]() |
{"role":"Project Manager","permissions":{"create":true,"read":true,"update":false,"delete":true}} ![]() |
How to solve this issue?如何解决这个问题? Please any help.
请任何帮助。 Any other detail required please let me know.
需要任何其他详细信息,请告诉我。
Thanks in advance.提前致谢。
You simply need to JOIN the tables and generate the expected JSON for each row:您只需要 JOIN 表并为每一行生成预期的 JSON:
SELECT
fs1.SchemaId,
(
SELECT
ar1.RoleName AS [role],
ar1.[create] AS [permissions.create],
ar1.[read] AS [permissions.read],
ar1.[update] AS [permissions.update],
ar1.[delete] AS [permissions.delete]
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
) AS roles
FROM commonformsschema fs1
JOIN ApplicationRoles ar1 ON ar1.SchemaId = fs1.SchemaId
WHERE
fs1.Tenant IN ('test', 'All') AND
ar1.RoleName IN ('Project Manager', 'Read')
Results:结果:
SchemaId![]() |
roles![]() |
---|---|
7a9a2521-45fb-4c9d-b7d9-e41927118119 ![]() |
{"role":"Project Manager","permissions":{"create":true,"read":true,"update":false,"delete":true}} ![]() |
ca5d8707-fee8-4a5b-ad61-813785e32575 ![]() |
{"role":"Project Manager","permissions":{"create":true,"read":true,"update":false,"delete":true}} ![]() |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.