Comment trouver des enregistrements en utilisant SQL manquant

Absence de données interrogées ne suggère pas actuellement présente. Un enregistrement manquant, cependant, sont des données qui pourraient ou devraient être présents, mais ne sont pas. Par exemple, les coordonnées du client et les commandes se trouvent dans les tables clients et commandes. Une liste de clients est demandé, et vous, le programmeur, assumer chaque client a un ordre. Permettant aux clients des commandes devraient fournir la liste des clients correcte, mais il le fait? Liste des clients de clients peut produire plus, suggérant commandes certains clients ont disparues. Vous devez vérifier que les clients sont absents commandes puis comprendre si cette circonstance est de par leur conception ou un bug.

Instructions

  1. 1

    Affichez clients distincts dans le tableau des clients. Par exemple:

    SELECT DISTINCT C.CUSTOMERID
    DE CLIENTS C

  2. 2

    Affichez clients distincts dans le tableau des commandes. Par exemple:

    SELECT DISTINCT O.CUSTOMERID
    DE COMMANDES O

  3. 3



    Déterminer les clients avec des ordres manquantes en combinant les étapes 1 et 2 dans une sous-requête corrélée.

    SELECT DISTINCT C.CUSTOMERID
    DE CLIENTS C
    Où existe pas
    (SELECT *

    DE COMMANDES O 

    OÙ O.CUSTOMERID = C.CUSTOMERID)

    Existe est une fonction Oracle qui vérifie l'existence de dossiers de sous-requêtes renvoyées. Préfaçant avec "PAS" tests de l'absence de documents. Ici, la sous-requête correspond clients dans les deux tables. Matches renvoient des résultats, ce qui exclut celles qui étaient appariées CUSTOMERID de partir le principal résultat ensemble. Seulement CUSTOMERID de sans match de O.CUSTOMERID seraient affichés.

  4. 4

    Alternativement, déterminer documents manquants à partir d'une vue composite de tables de cusotmer et l'ordre.




    SELECT DISTINCT C.CUSTOMERID
    Des clients C, O COMMANDES
    OÙ C.CUSTOMERID = O.CUSTOMERID (+)

     et O.CUSTOMERID est nulle

    Si vous soupçonnez la table de commande pourrait être dossiers manquants, puis essayez de cette requête pour afficher C.CUSTOMERID et O.CUSTOMERID côte à côte. Le (+) invoque une jointure externe gauche, qui indique à Oracle pour afficher toutes les données correspondant de l'instruction où plus tout C.CUSTOMERID de partir de la gauche; table de main qui n'a pas de O.CUSTOMERID correspondants de la table de droite.

    Si il ya de C.CUSTOMERID sans O.CUSTOMERID correspondants de, ils montrent avec des valeurs nulles pour l'inexistante de O.CUSTOMERID. Les lignes ayant de telles valeurs NULL représentent les enregistrements de commande manquantes.

    Si la liste est trop longue pour l'inspection visuelle, la deuxième WHERE assure les résultats sont limités à C.CUSTOMERID de commandes avec manquants.

Conseils & Avertissements

  • La requête est considérée comme corrélée parce que la sous-requête C.CUSTOMER références, qui existe dans une table pas référencé dans la sous-requête. Oracle va traiter la sous-requête d'un enregistrement à la fois, en essayant de faire correspondre chaque O.CUSTOMER à un C.CUSTOMER en succession, revenant un record null null ou non, selon le résultat du match.
  • Une sous-requête non corrélée n'a pas de référence à un champ en dehors de ses tables de références. Cela oblige Oracle pour exécuter la sous-requête et correspondre à l'ensemble des résultats pour la requête principale, la recherche de correspondances aux conditions de la clause WHERE.
  • A défaut d'attraper des documents manquants peuvent influer sur votre rapport final en ne présentant pas la portée complète des données.
» » » » Comment trouver des enregistrements en utilisant SQL manquant