使用准备好的语句对基于table1的table2上的行进行计数

时间:2019-03-03 16:15:57

标签: mysql

我有2张桌子:

clients_db

| clnt_id | clnt_sid | usr_sid | clnt_name |
|    1    | 12345678 |  10001  |   Peter   |
|    2    | 87654321 |  10001  |   Mikey   |

aircon_client_db

|  ac_id  | clnt_sid |
|    1    | 12345678 |
|    2    | 12345678 |
|    3    | 12345678 |
|    4    | 87654321 |
|    5    | 87654321 |

这是查询:

select *,count(air.ac_id) as nAC
from clients_db clnt 
left join aircon_client_db air on air.clnt_sid=clnt.clnt_sid
where clnt.usr_sid=? 
group by clnt.clnt_sid
order by clnt.clnt_name asc

根据上面的代码。我期望结果为clnt_id[1]=3clnt_id[2]=2。但是结果将全部返回0。我应该在哪里修理?

2 个答案:

答案 0 :(得分:1)

您只需要选择count(air.ac_id)

如果您期望得到类似clnt.usr_sid=?的结果,也可以将clnt.clnt_id=?替换为clnt_id[1]=3

select count(air.ac_id) as nAC
from clients_db clnt 
left join aircon_client_db air on air.clnt_sid=clnt.clnt_sid
where clnt.clnt_id=?
group by clnt.clnt_sid
order by clnt.clnt_name asc

您是否在问题中缺少clnt_name作为专栏?

答案 1 :(得分:0)

不要使用*,而是使用显式的列名,在这种情况下,您也可以使用clnt.*(您不需要左连接表的值,而只需要count(*)< / p>

select clnt.clnt_id, clnt.clnt_sid  ,count(air.ac_id) as nAC
from clients_db clnt 
left join aircon_client_db air on trim(air.clnt_sid)=trim(clnt.clnt_sid)
AND  trim(clnt.user_sid)= '10001'
group by clnt.clnt_sid
order by clnt.clnt_name asc