1

次の表があります。

  1. コーランマスター

ここに画像の説明を入力

2.クルアーンの祈り

ここに画像の説明を入力

私はすべての siparas を取得したかっただけで、結果としてカウントされます。

期待される結果は次のとおりです。

Sipara1      3
Sipara2      2
..
..
..

Sipara1 は QuranPrayed で 3 回到着したため 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

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 で明示的な結合に置き換えられたことに注意してください。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 に答える