1

我有下表:

  1. 古兰经大师

在此处输入图像描述

2.古兰经祈祷

在此处输入图像描述

我只是想拥有所有的 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
..
..
..

请帮我。

4

2 回答 2

4

您需要使用左连接:

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 中已被显式连接所取代。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 连接运算符。

于 2013-10-28T14:04:50.063 回答
1
select qm.sipara, COUNT(qp.Sipara) ReadSparas 
from QuranMaster qm LEFT JOIN QuranPrayed qp 
ON qp.sipara=qm.sipara
group by qm.sipara 
于 2013-10-28T14:04:25.217 回答