我有以下表格:
2.QuranPrayed
我只是希望拥有所有的siparas,并计算结果。
表示预期结果如下:
Sipara1 3
Sipara2 2
..
..
..
Sipara1是3,因为它在QuranPrayed中已经到过3次。
我做了以下查询:
select qm.sipara,COUNT(qp.Sipara) from QuranMaster qm,QuranPrayed qp
where qp.sipara=qm.sipara
group by qm.sipara
当QuranPrayed有值时,此查询可以正常工作。
但是当QuaranPrayed没有值时,它并没有显示我的结果。
我的期望是:
Sipara1 0
Sipara2 0
..
..
..
请帮帮我。
答案 0 :(得分:4)
您需要使用LEFT JOIN:
SELECT qm.sipara, Prayed = COUNT(qp.Sipara)
FROM QuranMaster qm
LEFT JOIN QuranPrayed qp
ON qp.sipara=qm.sipara
GROUP BY qm.sipara;
值得注意的是,您使用的隐式连接语法已超过20年,并在ANSI 92中使用显式连接替换。 This article Aaron Bertrand提出了一些非常有效的理由来切换到更新的语法。对你来说最重要的可能就是使用LEFT JOIN。以前在SQL-Server中你的查询应该是:
select qm.sipara,COUNT(qp.Sipara)
from QuranMaster qm,QuranPrayed qp
where qp.sipara=*qm.sipara
group by qm.sipara
然而,这已被弃用,您可能会收到以下错误:
查询使用非ANSI外连接运算符(“* =”或“= *”)。要在不进行修改的情况下运行此查询,请使用ALTER DATABASE的SET COMPATIBILITY_LEVEL选项将当前数据库的兼容级别设置为80。强烈建议使用ANSI外连接运算符(LEFT OUTER JOIN,RIGHT OUTER JOIN)重写查询。在SQL Server的未来版本中,即使在向后兼容模式下也不支持非ANSI连接运算符。
答案 1 :(得分:1)
select qm.sipara, COUNT(qp.Sipara) ReadSparas
from QuranMaster qm LEFT JOIN QuranPrayed qp
ON qp.sipara=qm.sipara
group by qm.sipara