PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Pilih pengguna yang hanya dimiliki oleh departemen tertentu

Ini adalah Divisi Relasional Tanpa Sisa (RDNR) masalah. Lihat artikel oleh Dwain Camps yang memberikan banyak solusi untuk masalah seperti ini.

Solusi Pertama

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
    )

Solusi Kedua

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)

Tanpa menggunakan GROUP BY dan 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. Cara lain untuk melemparkan varbit ke int? Dan besar?

  2. Koneksi Postgres ditolak dari kartrid Openshift Tomcat 7

  3. ubah database (postgresql) dengan python menggunakan psycopg2 secara dinamis

  4. anotasi hibernasi yang tepat untuk byte[]

  5. Optimalisasi kueri penghitungan untuk PostgreSQL