PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wybierz użytkowników należących tylko do określonych działów

To jest oddział relacyjny bez reszty (RDNR) problem. Zobacz ten artykuł autorstwa Dwain Camps, który zapewnia wiele rozwiązań tego rodzaju problemów.

Pierwsze rozwiązanie

Skrzypce SQL

SELECT empId
FROM (
    SELECT
        empID, cc = COUNT(DISTINCT department)
    FROM employe
    WHERE department IN('Y', 'Z')
    GROUP BY empID
)t
WHERE
    t.cc = 2
    AND t.cc = (
        SELECT COUNT(*)
        FROM employe
        WHERE empID = t.empID
    )

Drugie rozwiązanie

Skrzypce SQL

SELECT e.empId
FROM employe e
WHERE e.department IN('Y', 'Z')
GROUP BY e.empID
HAVING
    COUNT(e.department) = 2
    AND COUNT(e.department) = (SELECT COUNT(*) FROM employe WHERE empID = e.empId)

Bez użycia GROUP BY i HAVING :

SELECT DISTINCT e.empID
FROM employe e
WHERE
    EXISTS(
        SELECT 1 FROM employe WHERE department = 'Z' AND empID = e.empID
    )
    AND EXISTS(     
        SELECT 1 FROM employe WHERE department = 'Y' AND empID = e.empID
    )
    AND NOT EXISTS(
        SELECT 1 FROM employe WHERE department NOT IN('Y', 'Z') AND empID = e.empID
    )


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie znaleziono relacji dbo.MyTable, gdy istnieje schemat i tabela

  2. PostgreSQL - jak uruchomić VACUUM z kodu spoza bloku transakcyjnego?

  3. W mojej bazie danych PostgreSQL brakuje miejsca na dysku

  4. Jak zignorować SequelizeUniqueConstraintError w Sequelize?

  5. pobranie pierwszego wiersza w zapytaniu postgres