私は3つのSQLテーブルを持っています:
Data36 (Data_ID:int <PK>, type:int),
Data38(Data_ID:int <PK>, clientId:int),
Data47(Data_ID:int <PK>, payerID:int).
ここでは集計関数を使用せず、GROUP BYはDISTINCTと同じように動作する必要があるため、次のクエリは同じだと思いました。しかし、それらは非常に異なる結果セットを返し、その理由はわかりません。これらのクエリ間の違いを理解するのを手伝ってください。
クエリ1(153行を返します):
SELECT payer.Data_ID, payer.type
FROM Data36 AS payer
JOIN Data38 AS serv ON payer.Data_ID = serv.clientId
WHERE ((SELECT count(*) FROM Data47 AS regsites WHERE regsites.payerID = payer.Data_ID) = 0)
GROUP BY payer.Data_ID, payer.type
クエリ2(4744行を返します):
SELECT DISTINCT payer.Data_ID, payer.type
FROM Data36 AS payer
JOIN Data38 AS serv ON payer.Data_ID = serv.clientId
WHERE ((SELECT count(*) FROM Data47 AS regsites WHERE regsites.payerID = payer.Data_ID) = 0)
SQLServerのバージョンは5.0.40です。
より具体的な情報が必要な場合はお知らせください。
更新:これについて言及しなくて申し訳ありません:Data_IDはこれらのテーブルの主キーであるため、Data_IDはこれらのテーブルの各レコードに対して一意です。
SELECT count( * ) FROM Data36
--returns 5998
SELECT count(DISTINCT Data_ID) FROM Data36
--returns 5998
更新2:クエリ1で、「GROUP BYpayer.Data_ID」を「GROUPBYpayer.Data_ID、payer.type」に変更しました。結果は同じです-153行。