-2
votes

Oracle SQL: Vérifiez si l'entrée existe et revenez si ce n'est pas

Je veux vérifier si une entrée existe dans une table en fonction d'une valeur d'une 2e table, mais si elle n'existe pas, sélectionnez la valeur de la 2e table.

Pour expliquer, j'ai une table appelée périphériques et une table appelée tests . Chaque appareil dans périphérique a un identifiant unique (un entier). Chaque test dans tests fait référence à l'identifiant unique du périphérique utilisé sur le test. Par conséquent, chaque test est associé à un périphérique . Cependant, tous les ont été testés. De plus, plusieurs tests auraient pu être exécutés sur un seul appareil.

Alors ce que je veux SELECT est toutes les entrées dans les périphériques qui ne sont pas référencées par au moins une entrée dans tests


0 commentaires

3 Réponses :


0
votes

Vous pouvez utiliser un simple non dans code> pour obtenir le résultat souhaité (en supposant que ID code> comme identificateur unique dans les périphériques code> code>, périphérique_id code> comme clé étrangère sur périphérique.id code> dans tests code> et tests.device_id code> a un non null code > Attribut:

SELECT *
FROM devices
WHERE id NOT IN (
    SELECT DISTINCT device_id
    FROM tests
);


2 commentaires

Dans / non in / n'existe pas les sous-requêtes sont déjà implicitement distinctes (à Oracle au moins).


@Williamrobertson merci. Cette réponse a été faite avant que le titre / la balise Oracle ait été ajoutée. Je laisserai la réponse comme pour le moment,



4
votes

Alors ce que je veux sélectionner, toutes les entrées des périphériques ne sont pas référencées par au moins une entrée dans les tests.

En supposant que les structures de données suivantes: xxx

vous pouvez utiliser n'existe pas : xxx < p> ou une jointe à gauche antidiaptaire: xxx


0 commentaires

0
votes

Merci, ça a fonctionné. Je vais admettre que j'ai changé les noms de mes tables ci-dessus pour faciliter la question de poser la question, mais voici ce que j'ai conclu avec et cela fonctionne correctement: xxx

simple à la fin. Je ne peux pas dire que je suis un débutant à SQL, pouvez-vous? :)


1 commentaires

Je m'y allouerais contre l'utilisation de pas dans , car cela peut conduire à des comportements inattendus lorsqu'il s'agit de null s.