Hvordan du finner mangler Records Bruke SQL

Hvordan du finner mangler Records Bruke SQL


Fravær av spørres bare data tyder foreløpig ikke til stede. En manglende registrering, er imidlertid data som kan eller bør være til stede, men er ikke. For eksempel, kundeopplysninger og bestillinger bor i tabeller kunder og ordrer. En kundelisten er forespurt, og du som programmerer, antar hver kunde har en bestilling. Tilby kundene fra Bestillinger bør gi den riktige kundelisten, men gjør det vel? Oppføring kunder fra Kunder kan gi mer, noe som tyder på noen kunder har manglende bestillinger. Du må finne ut hvilke kunder som mangler bestillinger og deretter forstå hvis dette forholdet er av design eller en bug.

Bruksanvisning

1 Vise forskjellige kunder i KUNDER tabellen. For eksempel:

SELECT DISTINCT C.CUSTOMERID
Fra kunder C

2 Vise forskjellige kunder i ORDRE tabellen. For eksempel:

SELECT DISTINCT O.CUSTOMERID
Fra bestillinger O

3 Bestem kunder med manglende ordre ved å kombinere trinn 1 og 2 i en korrelert delspørring.

SELECT DISTINCT C.CUSTOMERID
Fra kunder C
DER IKKE eksisterer
(PLUKKE UT *

FROM ORDERS O

HVOR O.CUSTOMERID = C.CUSTOMERID)

Eksisterer er en Oracle-funksjon som tester for eksistensen av returnerte delspørringen poster. Prefacing med "ikke" tester for fravær av poster. Her delspørringen kamper kunder i begge tabellene. Kamper gi resultater, noe som ville ekskludere de matchet CUSTOMERID s fra hovedresultatsettet. Bare CUSTOMERID er uten O.CUSTOMERID kamp ville bli vist.

4 Alternativt bestemme mangler poster fra et sammensatt syn på Cusotmer og bestille tabeller.

SELECT DISTINCT C.CUSTOMERID
KUNDER C, ORDRE O
HVOR C.CUSTOMERID = O.CUSTOMERID (+)

and O.CUSTOMERID is null

Hvis du mistenker at Bestill bord kan gå glipp poster, så prøv dette søket for å vise C.CUSTOMERID og O.CUSTOMERID side ved side. The (+) påkaller en venstre ytre delta, som forteller Oracle å vise alle samsvarende data fra WHERE uttalelsen pluss noen C.CUSTOMERID S fra venstre tabell som ikke har samsvarende O.CUSTOMERID tallet i høyre side bordet.

Hvis det er C.CUSTOMERID oss med ingen treff på O.CUSTOMERID tallet, vil de vise med nullverdier for ikke-eksisterende O.CUSTOMERID tallet. Radene med slike nuller representerer de manglende ordre poster.

Hvis listen er for lang for visuell inspeksjon, er den andre HVOR uttalelsen sikrer resultatene begrenset til C.CUSTOMERID er med manglende bestillinger.

Hint

  • Spørringen anses korrelert fordi delspørringen referanser C.CUSTOMER, som eksisterer i en tabell ikke referert i delspørringen. Oracle vil behandle delspørringen en post om gangen, forsøker å matche hver O.CUSTOMER til en C.CUSTOMER på rad, returnerer en null eller ikke null posten, avhengig av kampresultatet.
  • En uncorrelated delspørringen har ingen referanse til et felt utenfor sine referanser tabeller. Dette tvinger Oracle å kjøre delspørringen og matche hele resultatet satt til hovedspørringen, på jakt etter kampene til WHERE-leddet forhold.
  • Sviktende å fange mangler poster kan påvirke sluttrapporten ved å ikke presentere det fulle omfanget av dataene.