sql >> Database >  >> RDS >> PostgreSQL

Selecteer gebruikers die alleen tot bepaalde afdelingen behoren

Dit is een Relationele Divisie zonder Rest (RDNR) probleem. Zie deze artikel door Dwain Camps dat veel oplossingen biedt voor dit soort problemen.

Eerste oplossing

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
    )

Tweede oplossing

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)

Zonder GROUP BY . te gebruiken en 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. Hoe een databaserace-conditie te voorkomen bij het handmatig verhogen van PK van nieuwe rij?

  2. System.Data.SqlClient-naamruimte voor MySQL?

  3. Stel alleen een unieke beperking in als een veld null is

  4. Hoe een externe sleutelbeperking in SQL te verwijderen?