PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Chọn người dùng chỉ thuộc các phòng ban cụ thể

Đây là Bộ phận quan hệ không có dư nợ (RDNR) vấn đề. Hãy xem bài báo của Dwain Camps cung cấp nhiều giải pháp cho loại vấn đề này.

Giải pháp đầu tiên

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
    )

Giải pháp thứ hai

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)

Không sử dụng GROUP BYHAVING :

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. Truy vấn psycopg2 trả về Thập phân ('giá trị')

  2. không thể trích xuất các phần tử từ một đại lượng vô hướng

  3. Postgres:nhận các giá trị tối thiểu, tối đa, tổng hợp trong một lựa chọn

  4. Làm cách nào để nhận hỗ trợ LISTEN / NOTIFY không đồng bộ / hướng sự kiện trong Java bằng cách sử dụng cơ sở dữ liệu Postgres?

  5. Hibernate 4 và Postgres:Làm thế nào để tạo một chuỗi trên mỗi bảng?