Tôi đang sử dụng SQL Server và tôi đang gặp khó khăn khi cố gắng lấy kết quả từ truy vấn SELECT
mà tôi muốn. Tôi đã thử tham gia vào các đơn đặt hàng khác nhau và sử dụng truy vấn phụ nhưng không có gì hoàn toàn hoạt động theo cách tôi muốn. Lấy ví dụ này về các ứng dụng phần mềm, với các mức phiên bản khác nhau, có thể được cài đặt trên máy tính của mọi người.Máy chủ SQL: Nhiều bảng kết hợp với mệnh đề WHERE
Tôi cần thực hiện JOIN
với WHERE
, nhưng vì một lý do nào đó tôi không thể nhận được kết quả mình muốn.
Có lẽ tôi đang xem dữ liệu của mình sai, tôi không hoàn toàn chắc chắn lý do tại sao tôi không thể làm việc này.
Application bảng
ID Name
1 Word
2 Excel
3 Powerpoint
Software Bảng (chứa thông tin phiên bản cho các ứng dụng khác nhau)
ID ApplicationID Version
1 1 2003
2 1 2007
3 2 2003
4 2 2007
5 3 2003
6 3 2007
Software_Computer bảng ngã ba
ID SoftwareID ComputerID
1 1 1
2 4 1
3 2 2
4 5 2
Computer bảng
ID ComputerName
1 Name1
2 Name2
Tôi muốn có một truy vấn mà tôi có thể chạy mà tôi chọn một máy tính cụ thể để hiển thị những gì phiên bản phần mềm và ứng dụng được có, nhưng tôi cũng muốn nó hiển thị những gì ứng dụng nó không có (phiên bản sẽ là một NULL
vì nó không có mà phần mềm trên nó)
SELECT Computer.ComputerName, Application.Name, Software.Version
FROM Computer
JOIN Software_Computer
ON Computer.ID = Software_Computer.ComputerID
JOIN Software
ON Software_Computer.SoftwareID = Software.ID
RIGHT JOIN Application
ON Application.ID = Software.ApplicationID
WHERE Computer.ID = 1
tôi muốn các kết quả sau thiết
ComputerName Name Version
Name1 Word 2003
Name1 Excel 2007
Name1 Powerpoint NULL
Nhưng tôi chỉ nhận được
Results
ComputerName Name Version
Name1 Word 2003
Name1 Excel 2007
Tôi nghĩ RIGHT JOIN
sẽ bao gồm tất cả các kết quả trong bảng ứng dụng, ngay cả khi họ không liên quan đến máy tính. Tôi đang thiếu gì/làm sai?
Có thể là cos tôi cao, nhưng bạn không phải là ứng dụng của phần mềm máy tính? Và không chỉ có hai phần mềm thuộc về máy tính 1? Ngoài ra, không nên tham gia bên trái ghi đè quyền tham gia? Rằng tôi cần kiểm tra. Và PowerPoint có một phiên bản vậy tại sao bạn mong đợi null? Ngoài ra, với nhiều phiên bản cho các ứng dụng, trong bảng phần mềm máy tính, bạn cũng cần duy trì một phiên bản id, nếu không bạn sẽ có tất cả các kết quả sai lệch. – frostymarvelous