У меня есть 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 строки.