Почему «SELECT DISTINCT a, b FROM ...» возвращает меньше записей, чем «SELECT DISTINCT A + '|'+ B ИЗ ... "? - PullRequest
7 голосов
/ 16 августа 2010

У меня есть запрос, который выбирает несколько полей, связанных с именами и адресами клиентов, но сводится к:

SELECT DISTINCT a, b, c, ... FROM big_dumb_flat_table

возвращает кучу записей (10986590). Когда я заменяю запятые в списке выбора, чтобы отформатировать их как разделенную конвейером строку:

SELECT DISTINCT a + '|' + b + '|' + c + '|' + ... FROM big_dumb_flat_table

он возвращает еще 248 записей. Я заверил себя, что ни в одном из полей нет трубок, которые могли бы нарушить верность возвращенного набора. Что здесь происходит?

Ответы [ 2 ]

10 голосов
/ 16 августа 2010

Пробелы могут вызывать это. Для сравнения строк они игнорируются.

CREATE TABLE #T
(
a varchar(10),
b varchar(10),
c varchar(10)
)

INSERT INTO #T
SELECT 'a ' as a, 'b' as b, 'c ' as c union all
SELECT 'a' as a, 'b' as b, 'c ' as c

SELECT DISTINCT a, b, c  
FROM #T /*1 result*/

SELECT DISTINCT a + '|' + b + '|' + c + '|'   
FROM #T /*2 results*/


SELECT DISTINCT LTRIM(RTRIM(a)) + '|' + LTRIM(RTRIM(b)) + '|' +
                LTRIM(RTRIM(c)) + '|'   
FROM #T /*1 result*/
2 голосов
/ 16 августа 2010

На самом деле я не могу придумать сценариев, которые бы принесли вам БОЛЬШЕ записей, только меньше. Я бы упростил запрос, просто выбрав + '|', а затем добавил бы больше столбцов по мере продвижения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...