我有3个SQL表:JOIN和子查询的组合如何影响MySQL查询中的GROUP BY行为?
Data36 (Data_ID:int <PK>, type:int),
Data38(Data_ID:int <PK>, clientId:int),
Data47(Data_ID:int <PK>, payerID:int).
我想下面的查询是相同的,因为我在这里不使用集合函数和GROUP BY的行为应该以同样的方式截然不同。但是他们返回的结果集非常不同,我不明白为什么。请帮我理解这些查询之间的偏差。
查询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行。
我从来没有见过像Data36,Data38,Data47这样的表名。尝试遵循命名约定。 – Pentium10 2010-06-21 13:49:35
谢谢,我理解好表名的有用性。这就是为什么我给这些由遗留系统表自动生成的同义词。 – 2010-06-21 14:17:27