我很少接受这个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中没有记录,则查询不起作用。我尝试使用左,右和完全连接,但没有想出来。任何帮助是极大的赞赏。
答案 0 :(得分:3)
由于您要打印所有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
答案 1 :(得分:2)
SELECT COUNT(*) as 'Total', idtb.cname
FROM idtb LEFT JOIN usrs
ON usrs.cid=idtb.cid
WHERE usrs.cid=1100
GROUP BY idtb.cname
答案 2 :(得分:1)
此查询将起作用
SELECT COUNT(u.cid) as 'Total',c.cname
FROM usrs u left JOIN
idtb c ON u.cid = c.cid and u.cid = 1100
GROUP BY u.cid
答案 3 :(得分:0)
试试这个。
SELECT i.cname, count(u.name) AS 'Total'
FROM idtb i LEFT JOIN usrs u ON (i.cid = u.cid)
GROUP BY 1;
COUNT(1)比*
我希望它适合你。
答案 4 :(得分:0)
这应该可以解决问题
SELECT COUNT(*) as 'Total', c.cname
FROM idtb c
LEFT JOIN users u
ON u.cid = c.cid
GROUP BY u.cid
答案 5 :(得分:0)
SELECT COUNT(u.cid) as 'Total'
, c.cname
FROM usrs u
RIGHT JOIN
idtb c
ON u.cid = c.cid
WHERE c.cid = 1100
GROUP BY c.cname
答案 6 :(得分:0)
有几种方法可以做到这一点。最简单的可能是使用子查询:
SELECT
(SELECT COUNT(1) FROM usrs WHERE cid = 1100) as Total,
cname
FROM
idtb c
WHERE
c.cd = 1100;
答案 7 :(得分:0)
mysql将允许您在选择列表中使用整个子查询,只要子查询生成scalar value(子查询必须只返回1列,并且只返回1行)。
select (SELECT COUNT(*) as 'Total' FROM usrs u WHERE u.cid = 1100)
, (SELECT c.cname FROM idtb c WHERE c.cid = 1100)