Lewy SQL Dołącz tylko pierwszy mecz
Mam zapytanie do dużej liczby dużych tabel (wierszy i kolumn) z wieloma złączeniami, jednak jedna z tabel ma kilka zduplikowanych wierszy danych powodujących problemy dla mojego zapytania. Ponieważ jest to kanał do odczytu tylko w czasie rzeczywistym z innego działu, nie mogę naprawić tych danych, jednak próbuję zapobiegać problemom w moim zapytaniu z niego.
Biorąc to pod uwagę, muszę dodać te dane crap jako lewe przyłączenie do mojego dobrego zapytania. Zestaw danych wygląda tak:
IDNo FirstName LastName ...
-------------------------------------------
uqx bob smith
abc john willis
ABC john willis
aBc john willis
WTF jeff bridges
sss bill doe
ere sally abby
wtf jeff bridges
...
(około 2 tuziny kolumn i 100K wierszy)
Moim pierwszym instynktem było wykonanie odmiennego podania około 80K wierszy:
SELECT DISTINCT P.IDNo
FROM people P
Ale kiedy spróbuję, otrzymam wszystkie wiersze z powrotem:
SELECT DISTINCT P.*
FROM people P
LUB
SELECT
DISTINCT(P.IDNo) AS IDNoUnq
,P.FirstName
,P.LastName
...etc.
FROM people P
Pomyślałem wtedy, że wykonam funkcję agregującą FIRST () na wszystkich kolumnach, ale to też jest błędne. Syntaktycznie czy robię tu coś złego?
Aktualizacja: Chciałem tylko zauważyć: Te rekordy są duplikatami opartymi na polu nie-kluczowym / nieindeksowanym o identyfikatorze wymienionym powyżej. Identyfikator to pole tekstowe, które chociaż ma tę samą wartość, jest innym przypadkiem niż inne dane powodujące problem.