Home Hardware Networking Programmazione Software Domanda Sistemi
Conoscenza Informatica >> Programmazione >> Computer Programming Languages >> .

Come trovare record mancanti con SQL

Assenza di dati della query non suggerisce solo al momento presente. Un record manca, tuttavia , è un dato che potrebbe o dovrebbe essere presente, ma non lo è. Ad esempio , i dati del cliente e gli ordini risiedono in tabelle Customers e Orders . Un elenco dei clienti è richiesto , e voi , il programmatore , assumere ogni cliente ha un ordine . Fornendo ai clienti di ordini dovrebbe fornire l' elenco dei clienti corretta , ma lo fa? Elenco clienti dai clienti possono produrre di più , suggerendo alcuni clienti hanno dispersi ordini. È necessario verificare che i clienti mancano ordini e quindi capire se questa circostanza è di progettazione o di un bug . Istruzioni
1

Mostra clienti distinti nella tabella Clienti. Per esempio :

selezionare i clienti C.CUSTOMERIDFROM DISTINTI C
2

Mostra clienti distinti in tabella ORDINI . Per esempio :

SELEZIONA GLI ORDINI O.CUSTOMERIDFROM DISTINTI O
3

Determinare i clienti con ordini mancanti combinando i punti 1 e 2 in una subquery correlata

SELECT DISTINCT C.CUSTOMERIDFROM CLIENTI CWHERE NOT EXISTS ( SELECT * FROM ORDINI OWHERE O.CUSTOMERID = C.CUSTOMERID ) per

esiste è una funzione di Oracle che i test per l'esistenza di record restituiti sottoquery . Prefazione di test ", non" per l'assenza di registrazioni . Qui , la sottoquery soddisfa i clienti in entrambe le tabelle . Partite risultati restituiti , il che escluderebbe quelli abbinati CustomerId di dalla principale set di risultati . Solo CustomerId di senza partita O.CUSTOMERID verrebbe visualizzato .
4

alternativa, determinare i record mancanti da una visione composita di cusotmer e tavoli ordine.

SELECT DISTINCT C.CUSTOMERIDFROM CLIENTI C , ORDINI OWHERE C.CUSTOMERID = O.CUSTOMERID ( +) e O.CUSTOMERID è nullo

Se si sospetta la tabella ordine poteva mancare record , quindi provare questa query per visualizzare lato C.CUSTOMERID e O.CUSTOMERID a fianco. La ( + ) invoca un join esterno sinistro , che indica a Oracle di mostrare tutti i dati corrispondenti dalla WHERE plus ' s dalla tabella di sinistra che non hanno alcuna corrispondenza O.CUSTOMERID ' qualsiasi C.CUSTOMERID s nella tabella a destra .

Se ci sono ' s senza O.CUSTOMERID matching' C.CUSTOMERID s , essi mostrano con valori nulli per s l' inesistente O.CUSTOMERID ' . Le righe che dispongono di tali valori nulli rappresentano i record di ordini mancanti.

Se la lista è troppo lunga per l'ispezione visiva , la seconda istruzione WHERE garantisce i risultati sono limitati a s C.CUSTOMERID ' con gli ordini mancanti.

 

Programmazione © www.354353.com