Проблемы с удалением дубликатов в результатах моего запроса - PullRequest
0 голосов
/ 12 августа 2011

Следующий запрос выдаст двадцать строк. Я пытаюсь удалить дубликаты версий «Тип и версия», но продолжаю возвращать дубликаты

SELECT DISTINCT
STR(C.CustomerID, 4) AS 'Customer ID',
STR(INV.InvoiceNbr, 3) AS 'Invoice Number',
STR(LINE.FK_StoveNbr, 3) AS 'Stove Number', 
CAST(S.Type + ', ' + S.Version AS CHAR (15)) AS 'Type and Version'
FROM CUSTOMER C, INVOICE INV, INV_LINE_ITEM LINE, STOVE S
WHERE INV.FK_CustomerID = C.CustomerID
AND INV.InvoiceNbr = LINE.FK_InvoiceNbr
AND SerialNumber = LINE.FK_StoveNbr
AND C.StateProvince = 'OR'
ORDER BY 'Type and Version';

Во всяком случае, я продолжаю получать несколько версий типа и версии плиты в моих результатах. Я не уверен, что это правильно, потому что в Орегоне всего десять клиентов.

1 Ответ

0 голосов
/ 12 августа 2011

Вы используете прямое соединение, попробуйте переключиться влево.

SELECT DISTINCT
    STR(C.CustomerID, 4) AS 'Customer ID',
    STR(INV.InvoiceNbr, 3) AS 'Invoice Number',
    STR(LINE.FK_StoveNbr, 3) AS 'Stove Number', 
    CAST(S.Type + ', ' + S.Version AS CHAR (15)) AS 'Type and Version'
FROM INVOICE INV,
    LEFT JOIN CUSTOMER C on (C.CustomerID = INV.FK_CustomerID)
    LEFT JOIN INV_LINE_ITEM LINE ON (INV.InvoiceNbr = LINE.FK_InvoiceNbr)
    LEFT JOIN STOVE S ON (S.SerialNumber = LINE.FK_StoveNbr)
WHERE C.StateProvince = 'OR'
ORDER BY 'Type and Version';

Причина в том, что прямые соединения рассматривают все таблицы как мастера.1 = 1, левые соединения позволяют вам установить приоритет.Так в моем примере.Счет-фактура является основной таблицей.Все остальные таблицы просто используются для заполнения дополнительной информации.Они прилагаются.

Надеюсь, что это имеет смысл.

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