要件:各人が投稿した画像の数を知りたい。COUNT()は特定の列で0を返します。
したがって、次のようにテーブルスキーマを作成します。
Table=Person
==========
Id (PK) , Column1, Column2, LId (FK)
Table=ListMaster
============
Id (PK) , LId (Unique)
Table = ListDetail
===========
Id (PK), LId(FK), DataId(FK)
Table = Image
=========
Id (PK), Column1, Column2
とクエリSQL
SELECT Person.Id AS PersonId,
Person.Column1 AS PersonC1,
Person.Column2 AS PersonC2,
COUNT(Image.Id) AS ImageCount
FROM Person
LEFT OUTER JOIN ListMaster ON Person.LId = ListMaster.LId
LEFT OUTER JOIN ListDetail ON ListDetail.LId = ListMaster.LId
LEFT OUTER JOIN Data AS Image ON ListDetail.DataId = Image.Id
GROUP BY Person.Id,
Person.Column1,
Person.Column2
を使用し、私は彼が前に掲示しているイメージがありますが、いくつかの人の「ImageCountは」「0」を持って気づきます。
私のクエリを修正する方法を教えてください。あるいは論理的にも私が望むことをすることが可能ですか?私は自分のテーブルデザインについて間違いを犯していると思う。
私はImageCountが2
1
0
1
を返す必要がありますが、それは
2
1
0
0
EDIT 1を返すCOUNT(Image.Id)AS期待
Sample Data
=======
Table = Person
Id (PK)(bigint identity) | Column1 (nvarchar(max)) | Column2 (nvarchar(max)) | LId (FK) (bigint [null])
1 | Test 1 C1 | Test1 C2 | 1
2 | Test 2 C1 | Test 2 C2 | 2
3 | Test 3 C1 | Test 3 C2 | NULL
4 | Test 4 C1 | Test 4 C4 | 37
Table = ListMaster
Id (PK)(bigint)(identity) | LId (Unique)(bigint)
1 | 1
2 | 2
3 | 37
Table = ListDetail
Id (PK)(bigint identity)| LId(FK)(bigint not null)| DataId(FK)(bigint not null)
1 | 1 | 1
2 | 1 | 2
3 | 2 | 3
4 | 37 | 4
Table = Image
Id (PK)(big int not null)(identity) | Column1 (nvarchar(max)) | Column2 (nvarchar(max))
1 | Location 1 | Dummy Data 1
2 | Location 2 | Dummy Data 2
3 | Location 3 | Dummy Data 3
4 | Location 4 | Dummy Data 4
:テーブルデザインを変更
EDIT 2 :サンプルデータを追加する
'MyTable.LId' ?? –
あなたのお問い合わせは、okですので、おそらくデータの問題です。 'COUNT()'と 'GROUP BY'を取り除き、' DATA。* 'を追加してグループ化する前にデータの結果を見るようにしてください。 –
@JuanCarlosOropeza私はSELECT * FROM Imageを試しましたが、正しいデータが表示されていました。しかし、私はCOUNT()とGROUP BYを使用しようとすると、 "ImageCount"は "0"になります。 –