SQL Left Inscreva-se somente na primeira partida
Eu tenho uma consulta contra um grande número de grandes tabelas (linhas e colunas) com um número de associações, no entanto, uma das tabelas tem algumas linhas duplicadas de dados causando problemas para a minha consulta. Como esse é um feed em tempo real somente leitura de outro departamento, não posso consertar esses dados; no entanto, estou tentando evitar problemas na minha consulta.
Tendo em conta que, eu preciso adicionar esses dados de porcaria como uma junção esquerda para minha boa consulta. O conjunto de dados se parece com:
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
...
(cerca de 2 dúzias de colunas e 100 mil linhas)
Meu primeiro instinto foi realizar um distinto me deu cerca de 80 mil linhas:
SELECT DISTINCT P.IDNo
FROM people P
Mas quando eu tento o seguinte, recebo todas as linhas de volta:
SELECT DISTINCT P.*
FROM people P
OU
SELECT
DISTINCT(P.IDNo) AS IDNoUnq
,P.FirstName
,P.LastName
...etc.
FROM people P
Eu então pensei em fazer uma função agregada FIRST () em todas as colunas, mas isso também parece errado. Sintacticamente estou fazendo algo errado aqui?
Atualizar: Queria apenas observar: Esses registros são duplicados com base em um campo de ID não chave / não indexado listado acima. O ID é um campo de texto que, embora tenha o mesmo valor, é um caso diferente dos outros dados que causam o problema.