简体   繁体   English

使用 CROSS APPLY FOR JSON PATH 加入查询

[英]Join a query with CROSS APPLY FOR JSON PATH

I have two SQL Server tables ApplicationRoles and commonformsschema .我有两个 SQL Server 表ApplicationRolescommonformsschema 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架构ID roles角色
7a9a2521-45fb-4c9d-b7d9-e41927118119 7a9a2521-45fb-4c9d-b7d9-e41927118119 {"role":"Senior Construction Manager","permissions":{"create":true,"read":true,"update":true,"delete":true}} {"role":"高级施工经理","permissions":{"create":true,"read":true,"update":true,"delete":true}}
ca5d8707-fee8-4a5b-ad61-813785e32575 ca5d8707-fee8-4a5b-ad61-813785e32575 {"role":"Senior Construction Manager","permissions":{"create":true,"read":true,"update":true,"delete":true}} {"role":"高级施工经理","permissions":{"create":true,"read":true,"update":true,"delete":true}}

Expected result:预期结果:

SchemaId架构ID roles角色
7a9a2521-45fb-4c9d-b7d9-e41927118119 7a9a2521-45fb-4c9d-b7d9-e41927118119 {"role":"Project Manager","permissions":{"create":true,"read":true,"update":false,"delete":true}} {"role":"项目经理","permissions":{"create":true,"read":true,"update":false,"delete":true}}
ca5d8707-fee8-4a5b-ad61-813785e32575 ca5d8707-fee8-4a5b-ad61-813785e32575 {"role":"Project Manager","permissions":{"create":true,"read":true,"update":false,"delete":true}} {"role":"项目经理","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架构ID roles角色
7a9a2521-45fb-4c9d-b7d9-e41927118119 7a9a2521-45fb-4c9d-b7d9-e41927118119 {"role":"Project Manager","permissions":{"create":true,"read":true,"update":false,"delete":true}} {"role":"项目经理","permissions":{"create":true,"read":true,"update":false,"delete":true}}
ca5d8707-fee8-4a5b-ad61-813785e32575 ca5d8707-fee8-4a5b-ad61-813785e32575 {"role":"Project Manager","permissions":{"create":true,"read":true,"update":false,"delete":true}} {"role":"项目经理","permissions":{"create":true,"read":true,"update":false,"delete":true}}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM