2013-03-05 45 views
0

我在我的数据库中产生期望的结果时遇到问题。我想从其他表中提取“总行数”,其中条件将属于另一个表。要说清楚,下面是示例插图。在我的方案中需要的正确SQL语句

>tblBus 
> 
>Bus ID ~ Day~ Type 
> 
>1000 | Monday | Public 

>2000|Monday | Private 

>3000|Tuesday| Public 

>4000|Monday | Public 


>tblReservation 
> 
>Bus ID | Date 

>1000 | 2013/3/4 

>2000 | 2013/3/4 

>3000 | 2013/3/6 

让说,预订当天是星期一,这是2013年3月4日..我想显示所有的公共巴士上可用的周一新行有保留的总数在那辆巴士上制造的。

例如

GeneratedTable(其中date = '2013/3/4',类型= '公共',天= '星期一')

>Bus ID | Day | Type | TotalNumberReservation 

>1000 |Monday | Public | 1 

>4000 |Monday | Public | 1 
+0

'JOIN','GROUP BY'和'COUNT'。 – Wrikken 2013-03-05 19:21:19

回答

1

你可以用它连接在bus id,然后你的表如下得到保留的计数:

select b.`bus id`, 
    b.day, 
    b.type, 
    count(r.date) TotalNumberReservation 
from tblBus b 
inner join tblReservation r 
    on b.`bus id` = r.`bus id` 
where r.date = '2013-03-04' 
    and b.day = 'Monday' 
group by b.`bus id`, b.day, b.type 

SQL Fiddle with Demo

如果要返回匹配正确的一天,所有的行,即使没有预约,然后哟U将要使用LEFT JOIN

select b.`bus id`, 
    b.day, 
    b.type, 
    count(r.date) TotalNumberReservation 
from tblBus b 
left join tblReservation r 
    on b.`bus id` = r.`bus id` 
    AND r.date = '2013-03-04' 
where b.day = 'Monday' 
group by b.`bus id`, b.day, b.type 

SQL Fiddle with Demo

+0

已编辑:它有一个问题,它应该仍然显示所有同一天的巴士。例如在周一的所有巴士 – ChaosDarky 2013-03-05 19:38:56

+0

@DandeloDarkyCardona看到我的编辑,您将需要使用'LEFT JOIN'而不是 – Taryn 2013-03-05 19:41:43

+0

我已经在我的系统上尝试过它,它的工作完美无瑕!谢谢! :D直到下一次^ _ ^你是如此的亲! – ChaosDarky 2013-03-05 19:55:30

0

这里是产生所有总线,天,日期计数,然后就可以过滤你所需要的基本查询:

Select a.bus_id, day, type, count(*) as TotalNumberReservation 
    from tblBus a 
    join tblReservation b 
    on a.busId=b.busId 
group by a.bus_id,day,type