簡體   English   中英

需要有關SQL查詢的幫助

[英]Need help with SQL query

當前查詢

SELECT *
FROM employee AS E
INNER JOIN credential AS C ON (C.id = E.credentialId)
LEFT JOIN person AS P ON (C.personId = P.id)

我想修改此查詢,以便僅選擇同時具有登錄名1和登錄名2(loginrole.id)的員工/憑證。

相關表

loginrole
    id
    name
credential_has_loginrole
    id
    credentialId
    loginroleId

您可以加入子查詢,該子查詢將返回具有兩個登錄角色的憑據ID。

SELECT E.*, C.*, P.*
FROM employee AS E
  INNER JOIN (
      SELECT credentialId
      FROM credential_has_loginrole
      WHERE loginroleId IN (1,2)
      GROUP BY credentialId
      HAVING COUNT(DISTINCT loginroleId) = 2
    ) g ON E.credentialId = g.credentialId
  INNER JOIN credential AS C ON (C.id = E.credentialId)
  LEFT JOIN person AS P ON (C.personId = P.id)

更新 :根據評論,查找具有以下任一項的員工:

SELECT E.*, C.*, P.*
FROM employee AS E
  INNER JOIN (
      SELECT credentialId
      FROM credential_has_loginrole
      WHERE loginroleId IN (1,2)
      GROUP BY credentialId
    ) g ON E.credentialId = g.credentialId
  INNER JOIN credential AS C ON (C.id = E.credentialId)
  LEFT JOIN person AS P ON (C.personId = P.id)

另外,您可以將JOINDISTINCT一起使用:

SELECT DISTINCT E.*, C.*, P.*
FROM employee AS E
  INNER JOIN credential AS C ON (C.id = E.credentialId)
  INNER JOIN credential_has_loginrole chr
    ON E.credentialId = chr.credentialId
      AND chr.loginroleId IN (1,2)
  LEFT JOIN person AS P ON (C.personId = P.id)

Scrum Meister的答案是正確的。 您也可以使用2個連接樹:

    SELECT *
    FROM employee AS E
    INNER JOIN credential AS c 
        INNER JOIN credential_has_loginrole chl0 ON (c0.id=chl0.credentialId AND chl0.loginroleId=1)
        INNER JOIN credential_has_loginrole chl1 ON (c0.id=chl1.credentialId AND chl1.loginroleId=2)
    ON (c.id = E.credentialId)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM