Afwezigheid van opgevraagde data suggereert alleen momenteel niet aanwezig . Een ontbrekende record echter gegevens die kunnen of moeten aanwezig zijn maar niet . Bijvoorbeeld , klantgegevens en orders wonen in tabellen Klanten en Orders . Een klantenlijst wordt gevraagd , en u , de programmeur , neem elke klant heeft een bestelling . , Die klanten van bestellingen moeten de juiste klantenlijst te bieden , maar doet het ? Listing klanten van klanten kan opleveren meer , 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 Beeldscherm verschillende klanten 1 in tabel KLANTEN . Bijvoorbeeld : SELECT DISTINCT C.CUSTOMERIDFROM KLANTEN C Beeldscherm verschillende klanten 2 in tabel ORDERS . Bijvoorbeeld : SELECT DISTINCT O.CUSTOMERIDFROM BESTELLINGEN O 3 Bepaal klanten met ontbrekende bestellingen door het combineren van de stappen 1 en 2 in een gecorreleerde subquery SELECT DISTINCT C.CUSTOMERIDFROM KLANTEN CWHERE NIET bESTAAT ( SELECT * FROM BESTELLINGEN OWHERE O.CUSTOMERID = C.CUSTOMERID ) op Twitter bESTAAT is een Oracle- functie die tests voor het bestaan van geretourneerde subquery records. Voorafgaat met " NIET " test op de afwezigheid van records. Hier , de subquery overeenkomt klanten in beide tabellen . Wedstrijden terugkeer 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.CUSTOMERIDFROM KLANTEN C , ORDERS OWHERE C.CUSTOMERID = O.CUSTOMERID ( + ) en O.CUSTOMERID null Als u vermoedt dat de Orde tafel zou kunnen missen records, probeer dan deze query te C.CUSTOMERID en O.CUSTOMERID kant weer aan zij . De ( + ) roept een left outer join , die Oracle vertelt aan alle overeenkomende gegevens van de WHERE statement plus eventuele C.CUSTOMERID ' s uit de linker tabel die geen overeenkomende O.CUSTOMERID hebben ' s aan de rechterzijde tafel . Tonen Als er C.CUSTOMERID ' s zonder de aanpassing O.CUSTOMERID ' s , zullen ze laten zien met null-waarden voor de niet-bestaande O.CUSTOMERID ' s . De rijen met dergelijke nullen vertegenwoordigen de ontbrekende ordeverslagen . 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 het missen van orders.
|