PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Изберете потребители, принадлежащи само към определени отдели

Това е Релационно разделение без остатък (RDNR) проблем. Вижте това статия от Dwain Camps, който предоставя много решения на този вид проблеми.

Първо решение

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
    )

Второ решение

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)

Без да използвате GROUP BY и 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. Как да запишете низ, съдържащ единични кавички, в текстова колона в PostgreSQL

  2. Как мога да прочета клеймо за време със стойност на часова зона (timestamptz) от PostgreSQL в Rust?

  3. предложете инструмент postgres за намиране на разликата между схемата и данните

  4. SQL дублирани редове с множество леви съединения

  5. Аномалия при запис на изкривяване в Oracle и PostgreSQL не връща назад транзакция