我有两个选择,我希望结果表是两者的联合

时间:2013-06-14 17:41:56

标签: mysql database

我的目标是访问我的数据库并获得两件事:

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的新手,我没有时间去解决这个问题,因为我的项目是在这个星期天。 感谢您的帮助:)

3 个答案:

答案 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语法是值得的。