sql >> Database teknologi >  >> RDS >> PostgreSQL

Vælg brugere, der kun tilhører bestemte afdelinger

Dette er en Relationel Division uden Rester (RDNR) problem. Se denne artikel af Dwain Camps, der giver mange løsninger på denne form for problemer.

Første løsning

SQL Fiddle

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
    )

Anden løsning

SQL Fiddle

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)

Uden at bruge GROUP BY og 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. Kan jeg trygt stole på kolonnenavne i mysql?

  2. Hent poster fra én tabel, hvor der ikke er en post i en anden

  3. SQLcl til at overføre data fra Oracle til PostgreSQL eller YugabyteDB 🅾🐘🚀

  4. Django særskilt gruppe efter forespørgsel på to felter