Hoe vindt Missing Records met behulp van SQL

SQL technieken om de puzzel van ontbrekende gegevens op te lossen. blauwe puzzel achtergrond, een stukje gemist afbeelding door Stasys Eidiejus uit Fotolia.com

Afwezigheid van opgevraagd gegevens uitsluitend suggereert momenteel niet aanwezig.Een ontbrekende record echter gegevens die moeten of kunnen aanwezig zijn, maar is niet.Bijvoorbeeld, details en orders van klanten wonen in de tabellen Klanten en Orders.Een lijst met de klant wordt gevraagd, en u, de programmeur, veronderstellen elke klant heeft een bestelling.Het verstrekken van klanten uit Orders moet de juiste klant lijst te verstrekken, maar doet het?Vermelding klanten van klanten kunnen meer opleveren, suggereert sommige klanten hebben ontbrekende orders.Je moet nagaan welke klanten ontbreken orders en dan begrijpen als deze omstandigheid is door het ontwerp of een bug.

instructies

  1. tonen verschillende klanten in KLANTEN tabel.Bijvoorbeeld:

    SELECT DISTINCT C.CUSTOMERID
    van klanten C

  2. tonen verschillende klanten de bestellingen tabel.Bijvoorbeeld:

    SELECT DISTINCT O.CUSTOMERID
    uit opdrachten O

  3. Bepaal klanten met ontbrekende bestellingen door het combineren van stap 1 en 2 in een gecorreleerde subquery.

    SELECT DISTINCT C.CUSTOMERID
    van klanten C
    WAAR NIET BESTAAT
    (SELECT *

    uit opdrachten O

    WAAR O.CUSTOMERID = C.CUSTOMERID)

    bestaat, is een Oracle-functie dat de tests voor het bestaan ​​van terug subquery verslagen.Als inleiding met "NIET" test op de afwezigheid records.Hier, de subquery overeenkomt met klanten in beide tabellen.Wedstrijden terugkeren resultaten, die zou uitsluiten die afgestemd customerId's van het belangrijkste resultaat set.Alleen customerId's zonder O.CUSTOMERID wedstrijd zou worden weergegeven.

  4. alternatief bepalen ontbrekende records uit een samengestelde weergave van cusotmer en ORDER tafels.

    SELECT DISTINCT C.CUSTOMERID
    van klanten C, ORDERS O
    WAAR C.CUSTOMERID = O.CUSTOMERID (+)

    en O.CUSTOMERID null

    Als u vermoedt dat de Orde tafel zou kunnen missen verslagen, probeer dan deze queryweergeven C.CUSTOMERID en O.CUSTOMERID naast elkaar.De (+) roept een linkse outer join, die Oracle vertelt om alle overeenkomende gegevens van de WHERE statement plus C.CUSTOMERID vanaf de linker tabel Geen overeenkomende O.CUSTOMERID in de rechterkant tafel te laten zien.

    Als er C.CUSTOMERID met Geen overeenkomende O.CUSTOMERID's, zullen ze laten zien met null waarden voor de niet-bestaande O.CUSTOMERID's.De rijen met een dergelijke nullen vertegenwoordigen de ontbrekende orde verslagen.

    Als de lijst te lang is voor visuele inspectie, de tweede WHERE statement zorgt ervoor dat de resultaten zijn beperkt tot C.CUSTOMERID's met ontbrekende orders.

Tips & amp;Waarschuwingen

  • De query wordt beschouwd als gecorreleerde omdat de subquery referenties C.CUSTOMER, die bestaat in een tabel niet waarnaar wordt verwezen in de subquery.Oracle subquery één record tegelijk verwerken, probeert iedere O.CUSTOMER koppelen aan een C.CUSTOMER achtereenvolgens terug een null of null opnemen afhankelijk van het spel resultaat.
  • Een niet-gecorreleerde subquery heeft geen verwijzing naar een veld buiten de referenties tafels.Dit dwingt Oracle aan de subquery de gehele ingesteld op de belangrijkste vraag resultaat draaien en overeenkomen, op zoek naar overeenkomsten met de WHERE voorwaarden.
  • niet in slagen om ontbrekende gegevens te vangen kunt uw eindrapport beïnvloeden door niet de presentatie van de volledige omvang van de gegevens.

Resources

  • Een SQL analogie van Missing Data
449
0
3
Computer Programmeertalen