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

Chọn tập hợp con phù hợp theo quan hệ nhiều-nhiều

Select project_ID 
from user_projects
where user_ID in (1,2)
group by project_ID
Having count(*) = 2

Bạn biết rằng bạn có 2 người dùng, bạn biết rằng họ sẽ là duy nhất (khóa chính), vì vậy bạn biết rằng nếu có 2 bản ghi, cho cùng một dự án thì đó là một bản ghi bạn muốn.

Câu hỏi của bạn cho biết bạn đã gửi GIVEN người dùng ở đó vì bạn biết những người dùng nào và có bao nhiêu người dùng. SQL ở trên có thể được cập nhật để chấp nhận các tham số cho những tham số đã biết này và do đó vẫn động, không giới hạn chỉ 2 người dùng.

where user_ID in (userlist)
having count(*) = (cntuserList)

----------- Để xử lý tình huống khi tập hợp người dùng trống -----

Select P.project_ID 
from Projects P
LEFT JOIN user_projects UP
where (UP.user_ID in (1,2) OR UP.USER_ID is null)
group by project_ID
Having count(*) = 2

Vì vậy, đây là những gì điều này làm. Nó trả về tất cả các dự án và nếu có người dùng liên kết với dự án đó, nó sẽ xác định họ.>

Nếu tập hợp trống, tham gia TRÁI cùng với câu lệnh userID is null sẽ giữ cho các dự án không có người dùng nào được liệt kê bất kể tập hợp đó có trống hay không. Mệnh đề có sẽ giảm thêm tập hợp xuống còn # người dùng mà bạn đã xác định trong tập hợp, HOẶC 0 cho biết trả về tất cả các dự án không có người dùng nào được chỉ định.

Một trường hợp bổ sung mà chúng tôi chưa thảo luận là điều gì sẽ xảy ra nếu một dự án chứa nhiều người dùng hơn những gì bạn đã xác định trong tập hợp. Hiện tại dự án này sẽ được trả lại; nhưng tôi không khẳng định đó là điều bạn muốn.

trên một lưu ý nhỏ, cảm ơn vì đã làm cho tôi suy nghĩ. Tôi không còn phải nhập mã nhiều nữa; đó là lý do tại sao thỉnh thoảng tôi lại troll ở đây để xem tôi có thể giúp gì không!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để nhập các bảng có giá trị bị thiếu?

  2. Lặp lại kích thước mảng trong plpgsql

  3. Cách nhập tệp XML lớn (~ 10GB) vào PostgreSQL

  4. Sách “Hiệu suất cao PostgreSQL 9.0” đã ra mắt

  5. Các nút radio được chọn bằng ng-model