复杂SQL使用InnerJoin选择SOD

时间:2018-03-01 17:23:56

标签: mysql sql select join inner-join

你好吗?我正在尝试部署复杂的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 autoincremental PK)

Facturar P_Facturacion
Administrar P_Administracion

MATRIX(矩阵有两个有风险的职责。这使用职责ID如FK和矩阵PK是一个自动增量)

Facturar Administrar Critical(risk)

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

结果示例是。 Pedro Facturar Administrar严重

谢谢!

1 个答案:

答案 0 :(得分:0)

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 Billing to。