我有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