Vì vậy, tôi phải nói, SQL là khía cạnh yếu nhất của tôi với tư cách là một nhà phát triển. Có lẽ những gì tôi đang cố gắng thực hiện là khá dễ dàng. Tôi có một cái gì đó như thế này (Nó không phải là mô hình thực tế, nhưng để làm cho nó đơn giản để hiểu mà không lãng phí quá nhiều thời gian giải thích nó, tôi đã đưa ra một ví dụ bắt chước chính xác các mối quan hệ bảng tôi phải sử dụng). Một mặt, một bảng, hãy gọi nó là "Người dùng". Các cột như khóa chính "UserId", "UserName", v.v.Chọn khác biệt trên tham gia bên trong Truy vấn lọc theo nhiều giá trị trên một cột?
Tiếp theo, một Bảng khác, "Giấy phép". Liên quan 1: N với người dùng, mỗi giấy phép thuộc về một người dùng, người dùng có thể có nhiều giấy phép. Vì vậy, chúng tôi sẽ có một PK IdLicense, một Id Ider, và vân vân.
Tiếp theo, một bảng có tên là "Thiết bị". ở đây chúng tôi đã xác định các thiết bị khác nhau. IdEquipment, EquipmentName. Không còn nhiều điều để nói về nó nữa.
Cuối cùng, một bảng tạo mối quan hệ N: M giữa "Giấy phép" và "Thiết bị". khi người dùng xác định giấy phép, họ có thể chỉ định các thiết bị khác nhau mà giấy phép cho phép họ thao tác. Vì vậy, một giấy phép có thể liên quan đến một số thiết bị, và một phần của thiết bị có thể liên quan đến nhiều giấy phép.
Thỏa thuận thực sự xuất hiện ở đây. Tôi đã được lệnh thực hiện một số loại hệ thống tìm kiếm cho phép bạn nhận người dùng dựa trên thiết bị họ đủ điều kiện để xử lý. Có thể thực hiện nhiều lựa chọn để bạn tìm kiếm người dùng đủ điều kiện để xử lý thiết bị "A "," B "và" C ". Ví dụ, chúng tôi có 2 người dùng, James và Dave. James có 2 giấy phép, Dave có một giấy phép. James có đủ điều kiện để sử dụng máy "A" và "D" trên giấy phép đầu tiên của mình, "B" và "C" trên giấy phép thứ hai. Dave đủ điều kiện để xử lý loại thiết bị "B" và "C" trên giấy phép duy nhất của mình. Nếu ai đó cố gắng tìm kiếm người dùng có thể xử lý thiết bị "A", "B" VÀ "C", thì chỉ có James mới là bản ghi trả lại.
Cho đến nay tôi cho rằng tôi sẽ phải làm một cái gì đó giống như
SELECT DISTINCT IdUser
FROM Users
INNER JOIN Licenses
ON Licenses.IdUser = Users.idUser
INNER JOIN LicensesEquipments
ON LicensesEquipments.IdLicense = Licenses.IdLicense
INNER JOIN Equipment
ON Equipment.IdEquipment = LicensesEquipments.IdEquipment
WHERE Equipment.IdEquipment = ??
Làm thế nào tôi có thể lọc này trên tất cả 3 idEquipments khác nhau cho "A" "N" và "C".? Rõ ràng, tôi không thể tạo WHERE Equipment.IdEquipment = 1 và Equipment.IdEquipment = 2 vì ô không thể bằng 2 giá trị khác nhau. Tôi không thể làm WHERE Equipment.IdEquipment = 1 hoặc Equipment.IdEquipment = 2 kể từ khi sử dụng OR có nghĩa là bất kỳ người dùng nào nắm giữ ít nhất ONE khả năng sẽ được coi là kết quả hợp lệ và tôi đang tìm kiếm TẤT CẢ 3 thiết bị khác nhau trong trường hợp này. Lúc đầu, tôi cho rằng tôi sẽ phải tạo nhiều kết nối bên trong với thiết bị bảng, sử dụng bí danh, làm nhiều lần như các bộ lọc trên thiết bị tôi có, và sử dụng mỗi bí danh với một bộ lọc khác. Nhưng sau đó mã giám sát của tôi đến và nói với tôi để quên nó đi, vì ông nói rằng sẽ làm cho quá tốn kém khi ngày càng nhiều bộ lọc nơi gia tăng (mặc dù ông đã cho tôi thay thế không tốt ...)
Cảm ơn, nhưng, điều đó sẽ không trả lại bất kỳ người dùng nào có 3 thiết bị, không bao giờ là gì, miễn là một trong số đó là "A", "B", "C" ?.Ví dụ: ai đó được phép xử lý "A" "F" và "T". Người đó sẽ là một trong số các kết quả, nhưng tôi muốn những người có thể xử lý "A" "B" "C". Nếu họ cũng có thể xử lý nhiều thứ hơn là ok, nhưng họ PHẢI có thể xử lý tất cả những thứ có trong bộ lọc, không chỉ một trong số đó ... – Hobbes
ok, quên nó đi, tôi chưa có cà phê buổi sáng, lol. cảm ơn rất nhiều! – Hobbes