mysql - 需要有关 SQL 查询的帮助

标签 mysql sql

当前查询

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)

关于mysql - 需要有关 SQL 查询的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5240635/

相关文章:

php - 使用数据库中的值在 ajax 中使用 if 语句

php - 我想在类别中按日期从早期到当前排列我的记录

mysql - 错误 CONCAT MySQL - 没有连接 2 个或更多值

sql - Postgres psql select 结果未列出所有列并且选择列表示它不存在

mysql - 获取所有父节点

mysql - mysql 数据透视表出现问题

MySQL数据库大小估计

mysql - 连接多个数据库mysql

php - 将数据保存到SQL并根据json数组计数显示它们

php - 在 Laravel Eloquent 中获取和过滤关系