2014-04-03 15 views
7

Ho la tabella seguente. l'unica differenza nei dati è suff, wt; il resto di loro sembra uguale.Join interno che restituisce l'accesso ai record duplicati sql

Cose tavolo tavolo

Prefix Baseletter suff CSCcode Description WT  BNO  BNO-CSCcode 

    EIGC A5560  BGA 04020 blah1  0  5560  5560-04020 
    EIGC A5560  HEA 04020 blah2  17.9 5560  5560-04020 

Mapp

BNO  BNO-CSCcode EID Description 

    5560  5560-04020 4005 blah1 
    5560  5560-04020 4011 blah2 

sto cercando di inner join utilizzando BNO-CSCcode per ottenere l'identificazione elettronica per i corrispondenti BNO. Ma la mia domanda sta restituendo i duplicati. Sto ottenendo 4 record, anche se la prima tabella ha solo due record.

mia query SQL:

SELECT 
    Things.Prefix , 
    Things.Baseletter, 
    Things.suff, 
    Things.CSCcode, 
    Things.WT, 
    Mapping.BNO-CSCcode, 
    Mapping.EID 
FROM 
    Things 
    INNER JOIN Mapping ON Things.BNO-CSCcode = Mapping.BNO-CSCcode 

Perche 'si ottengono questi duplicati, e come posso risolvere questo?

risposta

13

BNO-CSCcode contiene duplicati. Stai partecipando al primo record di Things in entrambi i record di Mapp, quindi il secondo record di Things si aggiunge a entrambi i record di Mapp. Dandoti un totale di 4 record.

Se si desidera unire questi insieme, è necessario un modo univoco di identificare le righe tra le tabelle.

un netto dovrebbe riportarlo giù a 2 record:

SELECT DISTINCT 
    Things.Prefix, 
    Things.Baseletter, 
    Things.suff, 
    Things.CSCcode, 
    Things.WT, 
    Mapping.BNO-CSCcode, 
    Mapping.EID 
FROM 
    Things 
    INNER JOIN Mapping ON Things.BNO-CSCcode = Mapping.BNO-CSCcode 
+0

Il risultato non è cambiato quando si utilizza DISTINCT – vuyy1182

+0

@ vuyy1182 Quale colonna è diversa tra le righe? – paqogomez

+0

E '** Suff ** colonna – vuyy1182

2

Hai trovato duplicati perché entrambi i record della tabella Things hanno un BNO-CSCcode di 5.560-04.020, così come entrambi i record nella tabella Mapp. L'unica differenza tra i due che posso vedere è il campo Description. Quindi, se si utilizza la seguente query:

SELECT Things.Prefix ,Things.Baseletter,Things.suff,Things.CSCcode,Things.WT,Mapping.BNO-CSCcode,Mapping.EID 
FROM Things INNER JOIN Mapping ON Things.BNO-CSCcode = Mapping.BNO-CSCcode AND 
Things.Description = Mapping.Description 

... è necessario eliminare la duplicazione.

Tuttavia, l'utilizzo di un campo che è ovviamente un campo di testo in un join non è la procedura migliore, come se fossero generati dall'utente separatamente, è improbabile che corrispondano e richiede più tempo (relativamente parlando) per abbinare i campi con un conteggio di byte superiore a quelli con conteggi di byte bassi.

+0

Non il campo ** Descrizione ** è diffirente. ** Suff ** è diverso. Ma questo non esiste nella tabella Mapping. – vuyy1182

+0

Cosa intendi per "Il campo Descrizione non è diverso"? Intendi dire che i record in 'Mapp' non avranno necessariamente lo stesso' Description's come in 'Things'? –

Problemi correlati