2015-05-17 206 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