2015-05-17 154 views
0

我正在爲學校創建一個IT服務管理系統。我需要從SQL數據庫中檢索一個查詢,其中顯示了設備的基本詳細信息以及分配給該設備的所有者的ID。 「設備」表格列出所有計算機,「分配」表格指定將哪個用戶分配給每個設備(基於assetID)。SQL子查詢 - 引用子查詢的「WHERE」子句中的外部值

問題是我不確定如何從主查詢中引用當前行的'assetID'值。

SELECT 
devices.assetID, 
devices.make, 
devices.model, 
TotalServices=Count(services.id), 
AssignedOwner=(SELECT assignments.studentID FROM devices INNER JOIN assignments ON devices.assetID=assignments.assetID WHERE assignments.assetID=<VALUE OF ASSET ID FOR CURRENT ROW>) 

FROM devices 

LEFT JOIN services 
ON services.assetID = devices.assetID 

GROUP BY 
devices.assetID, 
devices.make, 
devices.model 

我不知道我怎麼會爲了獲取指定用戶的ID引用由assetid值當前行...

assignments.assetID=<VALUE OF ASSET ID FOR CURRENT ROW> 

預先感謝任何指導!

+0

你不應該使用JOIN嗎? –

回答

1

我想你想添加一個連接到分配表,如:

select  devices.assetid, 
      devices.make, 
      devices.model, 
      count(services.id) as totalservices, 
      assignments.studentid as assignedowner 
from  devices 
    left join assignments 
     on devices.assetid = assignments.assetid 
    left join services 
     on services.assetid = devices.assetid 
group by devices.assetid, 
      devices.make, 
      devices.model, 
      assignments.studentid 

left joinleft outer join(同樣的事情)只需要如果設備可能沒有對相應的資產assignmentsservices表。如果資產總是具有其他表格上的值(獨立考慮每個表格),則應將left join更改爲join

+0

如果當前未分配資產,與賦值的連接也可能應該是左連接。 – jpw

+0

@jpw是的,讀我的腦海。我簡直就是在做這個改變。謝謝! – tpag26

+0

我添加了一個註釋來使用左連接,如果這是一個真正的可能性。 –

0

如果我理解正確,這不是你要找的?

SELECT 
devices.assetID, 
devices.make, 
devices.model, 
TotalServices=Count(services.id), 
assignments.studentID AS AssignedOwner 

FROM devices 

INNER JOIN assignments ON devices.assetID=assignments.assetID 

LEFT JOIN services 
ON services.assetID = devices.assetID 

GROUP BY 
devices.assetID, 
devices.make, 
devices.model 

您是否有示例數據和預期的測試結果?

+0

謝謝你的答案。對下面的相同答案,我只需將'assignments.studentID'添加到GROUP BY子句。謝謝你的幫助! – tpag26