我的目标是访问我的数据库并获得两件事:
1st - 每间教室有多少台计算机:
select
room.idRoom, count(*) as 'Existing Computers'
from
room,
computer
where
room.idRoom = computer.idRoom
group by room.idRoom
2nd - 正在使用的计算机数量:
select
room.idRoom,
count(*) as 'Computers Used'
from
room,
session,
computer
where
room.idRoom = computer.idRoom
and computer.idComputer = session.idComputer
and session.logout is null
group by room.idRoom
虽然这两个查询分别正常工作,但我希望我的结果表只显示'Existing Computers'
的数量等于'Computers Used'
的数量的房间。主要目标是让房间列表完整。优选地以这种方式:
idRoom | Existing Computers | Computers Used
B100 | 4 | 4
B101 | 10 | 10
我很抱歉没有使用正确的格式来解决这个问题,但我是stackoverflow的新手,我没有时间去解决这个问题,因为我的项目是在这个星期天。 感谢您的帮助:)
答案 0 :(得分:0)
所以加入他们:
Select t1.idRoom, t1.ExistingComputers, t2.UsedComputers
(select
room.idRoom, count(*) as ExistingComputers
from
room,
computer
where
room.idRoom = computer.idRoom
group by room.idRoom) t1
inner join
(select
room.idRoom,
count(*) as UsedComputers
from
room,
session,
computer
where
room.idRoom = computer.idRoom
and computer.idComputer = session.idComputer
and session.logout is null
group by room.idRoom) t2 on t1.idRoom = t2.idRoom
我保留了你的伪代码。基本的想法是,您为要选择的第一个表提供别名,并为您选择的第二个表提供别名,然后在idRoom上加入它们。
答案 1 :(得分:0)
试试这个
Select ext.idRoom,
ExistingComputers as 'Existing Computers',
ComputersUsed as 'Computers Used'
from
(select
room.idRoom, count(*) as ExistingComputers
from
room,
computer
where
room.idRoom = computer.idRoom
group by room.idRoom) as ext
inner join
(select
room.idRoom,
count(*) as ComputersUsed
from
room,
session,
computer
where
room.idRoom = computer.idRoom
and computer.idComputer = session.idComputer
and session.logout is null
group by room.idRoom) as usd
on ext.idRoom = usd.idRoom
and ext.ExistingComputers = usd.ComputersUsed
干杯
答案 2 :(得分:0)
您可以在一个查询中执行此操作,不带子查询。
如果您将计算机加入注销为NULL的会话,那么您将只获得
SELECT r.idRoom, COUNT(*) AS 'Existing Computers In Use'
FROM room AS r
JOIN computer AS c ON r.idRoom=c.idRoom
JOIN session AS s ON c.idComputer=s.idComputer
WHERE s.logout IS NULL
GROUP BY r.idRoom
使用SQL-92 JOIN
语法是值得的。