Tôi đang làm việc trên đơn đăng ký nhân viên. Tôi đã có hai thực thể khác nhau Các dự án và Người dùng vừa được gán một số kỹ năng biến đổi.Cách so khớp/so sánh các giá trị trong hai kết quả trong SQL Server 2008?
Tôi đã có một bảng kỹ năng với các kỹ năng khác nhau (cột: id, name) tôi đăng ký các kỹ năng sử dụng trong một bảng gọi là UserSkills (với hai cột chính nước ngoài: fk_user và fk_skill) tôi đăng ký các kỹ năng dự án trong một bảng khác gọi là ProjectSkills (với hai cột khoá ngoài: fk_project và fk_skill).
Dự án có thể yêu cầu 6 kỹ năng và người dùng khác nhau khi đăng ký thiết lập Kỹ năng của họ.
Phần khó khăn là khi tôi phải tìm người dùng cho các Dự án của tôi dựa trên kỹ năng của họ. Tôi chỉ quan tâm đến người dùng đáp ứng rằng có TẤT CẢ các kỹ năng theo yêu cầu của dự án. Người dùng là ofcause được phép có tay nghề cao hơn sau đó yêu cầu.
Đoạn mã dưới đây sẽ không làm việc, (và thậm chí nếu nó đã làm, sẽ không phải là rất hiệu quả thân thiện), nhưng nó minh họa ý tưởng của tôi:
SELECT * FROM Users u WHERE
(SELECT us.fk_skill FROM UserSkills us WHERE us.fk_user = u.id)
>=
(SELECT ps.fk_skill FROM ProjectSkills ps WHERE ps.fk_project = [some_id])
Tôi đang suy nghĩ về việc chức năng của riêng tôi mà mất hai TABLE-biến, và sau đó làm việc ra so sánh trong đó (loại của một IN-chức năng sửa đổi), nhưng tôi muốn tìm một giải pháp đó là hiệu suất hơn thân thiện.
Tôi đang phát triển trên SQL Server 2008.
Tôi thực sự đánh giá cao bất kỳ ý tưởng hoặc đề xuất nào về điều này. Cảm ơn!
OMG! Bạn đã trả lời đúng câu trả lời chỉ sau 2½ phút! Bạn là người hùng của tôi! ;) Đây là câu hỏi đầu tiên của tôi về stackoverflow, nhưng chắc chắn không phải cuối cùng của tôi ... Cảm ơn bạn, giúp đỡ của bạn được nhiều đánh giá cao! –
Zounds. Có một trang web nào đó phát hiện ra và làm rõ các tên và tiếng rít đằng sau việc sử dụng các truy vấn phụ có liên quan này không? –
'@Philip Kelley': Tôi hiện đang viết một chuỗi các bài viết về' NOT IN' so với 'NOT EXISTS' và' LEFT JOIN/IS NULL' trong các 'RDBMS' khác nhau. – Quassnoi