Nwlapcug.com


Come trovare i record mancanti utilizzando SQL

Come trovare i record mancanti utilizzando SQL


Assenza di dati sottoposti a query suggerisce solo attualmente non presenti. Un record mancante, è tuttavia, dati che potrebbe o dovrebbero essere presentano ma non sono. Ad esempio, ordini e dettagli cliente risiedono nelle tabelle Customers e Orders. È richiesto un elenco di clienti, e si, il programmatore, assume che ogni cliente ha un ordine. Fornire ai clienti dagli ordini dovrebbe fornire l'elenco di cliente è corretto, ma lo fa? Elenco clienti da parte dei clienti può cedere di più, suggerendo alcuni clienti mancano gli ordini. È necessario accertare quali clienti mancano gli ordini e quindi capire se questa circostanza è di progettazione o un bug.

Istruzioni

1

Visualizzare i clienti distinti nella tabella CUSTOMERS. Per esempio:

SELEZIONARE CUSTOMERID DISTINTI
DA CLIENTI C

2

Visualizzare i clienti distinti nella tabella ordini. Per esempio:

SELEZIONARE DISTINTI O.CUSTOMERID
DA ORDINI O

3

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

SELEZIONARE CUSTOMERID DISTINTI
DA CLIENTI C
DOVE NON ESISTE
(SELEZIONARE *

FROM ORDERS O

DOVE O.CUSTOMERID = CUSTOMERID)

EXISTS è una funzione di Oracle che verifica l'esistenza di record restituito sottoquery. Prefazione con "Non" test per l'assenza di record. Qui, la subquery partite clienti in entrambe le tabelle. Partite restituiscono risultati, che escluderebbero di quei CUSTOMERID abbinati dal set di risultati principale. Verrebbe visualizzato solo CUSTOMERID con alcuna corrispondenza O.CUSTOMERID.

4

In alternativa, stabilire record mancanti da una vista composta di tabelle CUSOTMER e ordine.

SELEZIONARE CUSTOMERID DISTINTI
DA C CLIENTI, ORDINI O
DOVE CUSTOMERID = O.CUSTOMERID(+)

and O.CUSTOMERID is null

Se si sospetta che la tabella Order potrebbe essere record mancanti, quindi provare questa query per visualizzare CustomerID e O.CUSTOMERID fianco a fianco. (+) Richiama un left outer join, che racconta di Oracle per mostrare tutti i dati corrispondenti dell'istruzione dove oltre a qualsiasi CustomerID della tabella a sinistra che non hanno nessun O.CUSTOMERID corrispondenza nella tabella di destra.

Se ci sono CustomerID con nessun O.CUSTOMERID corrispondenza, si mostrerà con valori null per la O.CUSTOMERID inesistente Le righe avendo tali valori null rappresentano i record di ordini mancanti.

Se l'elenco è troppo lungo per l'ispezione visiva, la seconda dove istruzione garantisce che i risultati sono limitati a CustomerID è con ordini mancanti.

Consigli & Avvertenze

  • La query è considerata correlato perché la subquery fa riferimento a C.CUSTOMER, che esiste in una tabella non viene fatto riferimento nella subquery. Oracle elaborerà il record di una sottoquery alla volta, cercando di abbinare ogni O.CUSTOMER per un C.CUSTOMER in successione, restituzione di un record null o not null, a seconda del risultato della partita.
  • Una sottoquery uncorrelated non ha alcun riferimento a un campo suoi tavoli di riferimenti esterni. In questo modo Oracle per eseguire la subquery e corrispondere l'intero risultato impostato la query principale, alla ricerca di corrispondenze per le condizioni della clausola WHERE.
  • Non riuscendo a catturare mancante record possono avere un impatto il report finale da non presentare l'intera gamma dei dati.