2011-08-16 14 views
3

私はSQLで2つのテーブルを結合しようとしており、2番目のテーブルのカウントを取得しています。 2番目の表には複数の列があり、そのうち3つが一緒に主キーとして機能します。私は()の引数カウントにはテーブル名を使用するためのdingedます結合テーブルが複数の列の組み合わせを主キーとして持つ場合、結合テーブルのCOUNT()を選択する方法は?

SELECT times.*, COUNT(paylog.*) AS `total` 
FROM times 
LEFT JOIN paylog 
ON paylog.type = 'work' 
AND paylog.targetID = times.id 

:として私のクエリが開始あなたのSQL構文でエラーが発生している

。 を使用する権利構文についてはMySQLサーバのバージョンに対応していること取扱説明書を確認し 近く「*) LEFTはpaylogのJOIN回FROM total AS」一一意の列がにあった場合はライン1

でpaylogテーブルでは、私はここに与えられた助言に従うことができました:Can I count number of rows in joined table?しかし、そうではありません。ペイログテーブルのすべての結合行の数を選択するにはどうすればよいですか?私はサブクエリでカウントを取得しているので、それが少し遅くなるので、それを結合する必要があります。

答えて

1

Countは、特殊なケースの場合は、count(*)の結果セット内の非NULL値の数または結果セットの行数のみを返します。つまり、count(paylog.*)は有効なSQLではありません。

有効なカウントを実行するためにpaylogテーブルに一意の列が必要なわけではありません。結合が成功すると、カウントがインクリメントされます。そうでない場合、カラムの値はNULLになり、カウントは同じままになります。

各行のpaylogにリンクされた行の数を取得しようとしている場合は、group by times.id句も必要です。

関連する問題