复杂SQL选择带内连接的SOD

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复杂SQL选择带内连接的SOD相关的知识,希望对你有一定的参考价值。

你好吗?我正在尝试部署复杂的SQL选择。

表:

USER(有一个布尔值告诉我们它是用户还是个人资料)(nombre是PK)

nombre        is_user
pedro            1
P_Facturacion    0
P_Administracion 0

REL_USERPROFILE(用户及其配置文件之间的关系)(由用户名和配置文件名称组成的PK)

Pedro P_Facturacion
Pedro P_Administracion

DUTY(一个职责有多个配置文件,在示例中只有一个。)(id自动增量PK)

Facturar P_Facturacion
Administrar P_Administracion

MATRIX(矩阵有2个职责,存在风险。这使用职责ID如FK和矩阵PK是自动增量)

Facturar Administrar Critical(risk)

好吧,我必须选择所有必须具有dutys风险的配置文件的用户。为了更好地解释它,我需要在此示例中选择所有具有与职责Facturacion和administracion相关的配置文件的用户。

结果的例子是。 Pedro Facturar Administrar关键

谢谢!

答案
SELECT
            primerset.conflicto,
            primerset.operador1,
            primerset.duty1,
            primerset.P1,
            segundoset.duty2,
            segundoset.P2,
            primerset.criticidad,
            primerset.descripcion
          FROM
            ((SELECT Rel_Operador_Perfil.operador  AS 'operador1', Rel_Operador_Perfil.sucursal_operador as 'sucursal1', Duty.nombre AS 'duty1', Matriz.criticidad AS 'criticidad',
                Matriz.conflicto AS 'conflicto', Rel_Duty_Perfil.perfil as 'P1', Matriz.descripcion as 'descripcion'
             FROM (Rel_Operador_Perfil
              INNER JOIN Rel_Duty_Perfil ON Rel_Operador_Perfil.Operador_Perfil = Rel_Duty_Perfil.perfil
              INNER JOIN Duty ON Rel_Duty_Perfil.idduty = Duty.id
              INNER JOIN Matriz ON Duty.id = Matriz.duty1 ))AS primerset
          INNER JOIN
            (SELECT Rel_Operador_Perfil.operador as 'operador2',Rel_Operador_Perfil.sucursal_operador as 'sucursal2', Duty.nombre AS 'duty2', Rel_Duty_Perfil.perfil as 'P2'
              FROM(Rel_Operador_Perfil
              INNER JOIN Rel_Duty_Perfil ON Rel_Operador_Perfil.Operador_Perfil = Rel_Duty_Perfil.perfil
              INNER JOIN Duty ON Rel_Duty_Perfil.idduty = Duty.id
              INNER JOIN Matriz ON Duty.id = Matriz.duty2 )) AS segundoset
          ON primerset.operador1 =  segundoset.operador2)
          GROUP BY primerset.operador1, primerset.duty1, segundoset.duty2, primerset.conflicto, primerset.criticidad,primerset.P1,segundoset.P2,primerset.descripcion
          ORDER BY primerset.operador1`enter code here`

这是我的解决方案,但只有当我在矩阵上的职责之间只有1个关系时才有效。当我有多个关系时,它会向我展示交叉风险用户..例子

我说Billing vs Delivery处理销售订单处理和计费

该工具向我显示Billing vs Billing to。

以上是关于复杂SQL选择带内连接的SOD的主要内容,如果未能解决你的问题,请参考以下文章

SOD框架的Model连接数据库及增删改查

带内连接和限制的mysql子查询

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段

用于数据加载的 Android 活动/片段职责

12-带内管理带外管理 //0.8.6(GNS3版本)

SOD让你的旧代码焕发青春