我有 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)
SQL Server 版本是 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 BY payer.Data_ID' 更改为 'GROUP BY payer.Data_ID, payer.type'。结果仍然相同 - 153 行。