难倒嵌套多表MySQL查询

时间:2014-07-24 05:04:01

标签: mysql sql nested subquery

我正在尝试做一个相当复杂的(对我来说)嵌套查询。我的数据分为三个表:

  1. tblsite - 字段siteid(key),sitename
  2. tblroom - 字段 roomid(关键) roomsite(这定义了房间所在的站点,来自siteid)
  3. tblcomputer - 字段 computerid(关键) 计算机房(这定义了计算机所在的房间)
  4. 所以我想运行一个列出三件事的查询 - 网站名称,网站中房间的数量以及该网站上的计算机数量。

    目前,我的查询如下:

    SELECT siteid, sitename, (SELECT Count(*) FROM tblroom WHERE roomsite LIKE siteid) as     
    siteroomcount, .....
    

    .....指示计算机计数的子查询需要去的位置。它需要以某种方式为站点中的每个房间运行子查询,并使用辅助子查询来计算该站点的每个房间中的计算机。我希望这是有道理的。

    提前谢谢!

    -Scott Davis

1 个答案:

答案 0 :(得分:0)

我会告诉你一个例子,所以我认为你可以根据自己的情况进行推断

让我们说我们有类似的东西

create table site (sid int);
create table room (rid int, sid int);
create table comp (cid int, rid int);

insert into site values (1);
insert into site values (2);
insert into site values (3);
insert into room values (33,1);
insert into room values (44,1);
insert into room values (55,2);
insert into comp values (666,33);
insert into comp values (777,33);
insert into comp values (888,44);
insert into comp values (999,55);

然后这个查询

SELECT s.sid,
       Count(DISTINCT( r.rid )),
       Count(DISTINCT( c.cid ))
FROM   site s
left outer join room r on s.sid = r.sid
left outer join comp c on r.rid = c.rid
GROUP  BY s.sid 

会给你

SID     COUNT(DISTINCT(R.RID))  COUNT(DISTINCT(C.CID))
1       2                       3
2       1                       1
3       0                       0