Iam对此SQL查询有些困惑。我有两张桌子
TbleName - usrs TbleName - idtb
name | cid cname | cid
------------- ----------------
james | 1100 IT | 1100
john | 1200 HR | 1300
jack | 1100 QA | 1200
bill | 1300 HD | 1400
troy | 1100
SELECT COUNT(*) as 'Total' FROM usrs u WHERE u.cid = 1100;
SELECT c.cname FROM idtb c WHERE c.cid = 1100;
我的第一个查询返回3,第二个查询返回IT,现在我想将这2个查询合并为一个查询,结果如下
Total | Cname
------------------
3 | IT
我尝试了几种方法,这有效
SELECT COUNT(*) as 'Total',c.cname FROM usrs u JOIN
idtb c ON u.cid = c.cid WHERE u.cid = 1100
GROUP BY u.cid
但是,当u.cid = 1400时,该查询似乎不起作用,因为在usrs表中没有cid值为1400的名称,并且它返回空结果,但我希望结果为
Total | Cname
-------------------
0 | HD
如果usrs中没有记录,该查询将不起作用。我尝试使用左,右和完全联接,但没有弄清楚。任何帮助是极大的赞赏。
最佳答案
当您要打印所有cname
但要计数usrs
时,这是您需要的查询:
select a.cname, count(b.name)
from idtb a left join usrs b on (a.cid = b.cid)
group by a.cname
如果要为某些过滤器添加过滤器,只需添加where子句。
在小提琴上看到它:http://sqlfiddle.com/#!2/0acec/2
关于mysql - 在两个表上计数(*),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23633763/