Trải nghiệm duy nhất của tôi trong truy vấn là với MySQL, nhưng hy vọng nó cũng tương tự như vậy.
Truy vấn của bạn trông lạ đối với tôi vì truy vấn con của bạn nằm trong mệnh đề SELECT. Tôi chưa bao giờ thấy điều đó trước đây ... nhưng dường như nó được hỗ trợ trong MySQL. Thông thường, truy vấn con đến sau một FROM hoặc LEFT JOIN hoặc JOIN.
dụ của bạn là đủ đơn giản mà bạn có thể thực hiện nó với một LEFT JOIN:
SELECT C.guid, ..., COUNT(distinct D.id) as numprogs
FROM Computers AS C
LEFT JOIN ComputerData as D ON D.computer_id = C.id
Trong trường hợp này, LEFT JOIN là đúng loại tham gia để sử dụng vì ngay cả khi không có hồ sơ phù hợp trong Bảng D cho một bản ghi C cụ thể, tập kết quả của bạn sẽ vẫn chứa bản ghi C và các số đó sẽ là 0, như bạn mong đợi.
Nếu bạn thực sự muốn sử dụng một subquery, hãy thử này:
SELECT C.guid, ..., S.numprogs
FROM Computers AS C
LEFT JOIN
(SELECT computer_id, COUNT(*) as numprogs
FROM ComputerData GROUP BY computer_id) AS S
ON C.id=S.computer_id
Tôi đề nghị đơn giản hóa truy vấn của bạn để làm cho nó được truy vấn đơn giản nhất có thể mà nên làm việc, nhưng không hoạt động. Sau đó cho chúng tôi biết thông báo lỗi cụ thể mà công cụ cơ sở dữ liệu của bạn đang trả về.
Chỉnh sửa: Tôi đã nới lỏng trong MySQL chapter about subqueries và có vẻ như bạn nên thử xóa mệnh đề "như numprograms" sau truy vấn con của bạn ... có thể bạn không nhận được bất kỳ lựa chọn nào về việc đặt tên cột xuất phát từ truy vấn phụ sau khi bạn đã tạo truy vấn phụ.
Nguồn
2009-03-14 08:45:35
lỗi là gì? –
Xin chào, Xin lỗi, nó đã được sửa. Cảm ơn tất cả, Azuka – Zahymaka