J'ai une table "périphérique" avec des colonnes - ID, groupe, fonction, date. La fonction peut avoir deux valeurs - «Imprimer», 'Copier' et 'Scan'. Le groupe peut avoir des valeurs - A, B, C .... Je veux exécuter la requête Sélectionnez une pièce d'identité distincte, groupe, date du périphérique où fonctionne = 'Imprimer' moins (Sélectionnez ID, groupe, date où fonctionne ('Copier', ') commande par date;
ici i Vous souhaitez une liste des identifiants de périphérique pour les périphériques uniquement utilisés pour l'impression pour un groupe particulier. Si nous avons cette table de périphérique: p>
périphérique: p> Dans ce cas, je veux que le résultat soit {(2, A, 28-06- 20), (3, A, 30-06-20)}
Ici, je ne veux pas de dispositif_id 1 car il a à la fois les valeurs "Imprimer" et Scan pour le même groupe. Je veux seulement que ces identifiants de périphérique ne possèdent pas de valeurs autres que l'impression pour le même groupe.
Ici, ID de périphérique contient également les valeurs - «Print» et «Numérisation», mais elles sont pour différents groupes. Imprimer est pour le groupe A et Scan est pour le groupe B. Donc, pour l'identifiant de l'appareil - 2 et le groupe - 'A' Nous n'avons qu'un imprimé. Donc, je veux avoir le périphérique_id dans ma liste d'appareils.
Pour l'ID de périphérique - '3' ne contient que des valeurs d'impression dans la table de fonction, donc je veux aussi que ce soit dans ma liste. P> Le problème que je suis confronté est que la requête ne fonctionne pas comme prévu car Les dates ne sont pas identiques pour l'impression et la numérisation pour les identifiants de périphérique, même s'ils appartiennent au même groupe. Ainsi, lorsque j'essaie de faire un minus ', je reçois aussi ces identifiants de périphérique qui ont à la fois les valeurs »et« scan »pour le même groupe, car moins ne se sont pas produisés à cause d'une inadéquation. Je veux savoir comment je peux ignorer la date tout en faisant un minus dans la requête? P> Quertielle J'utilise - Sélectionnez ID distinct, groupe, date du périphérique où fonctionne = 'Imprimer' moins (Sélectionnez ID , groupe, date où la fonction (copie », 'scan') commande par date; p> p>
4 Réponses :
Veuillez utiliser ci-dessous Query,
select distinct workstation_id, type, usage_date from device where type = 'print' and id not in (select id from (select id, count(1) from group by id having count(1) > 1) qry);
J'ai mis à jour la question. Pouvez-vous s'il vous plaît répondre sur la base de ma question mise à jour?
Vous pouvez utiliser le Recommandation: N'utilisez jamais n'existe pas code> comme suit:
pas dans code> p> p> p> p> P> P >
"Jamais"? Pourquoi pas?
J'ai mis à jour la question. Pouvez-vous s'il vous plaît répondre sur la base de ma question mise à jour?
pas dans code> ne fonctionnera pas correctement lorsqu'il y a null. La réponse est mise à jour en fonction de l'exigence mise à jour. S'il vous plait verifiez maintenant!!
@Tejash pouvez-vous vérifier la question maintenant? Je l'ai changé légèrement ... Donc, cette solution ne fonctionnerait pas.
Je pense que vous avez besoin de 2 et 3 en sortie. La réponse ci-dessus fonctionnera.
@Littlefoot, avec pas dans, Oracle compare la colonne à toutes les valeurs de la sous-requête. Si l'une des valeurs est nulle, toute l'expression sera nulle, alors ne retournez rien. Comme Null n'est ni égal à ni pas égal à rien!
C'est correct, @tejash. Mais ce n'est pas une raison pour jamais b> l'utiliser. Si vous avez dit "méfiez-vous des valeurs nulelles" ou quelque chose comme ça, cela aurait plus de sens. "Jamais" est peut-être un mot trop fort.
Il vous suffit de supprimer les identifiants où tapez! = 'Imprimer';
select distinct id, group, date from device d1 where function = 'print' and not exists (select 1 from device d1 where function != 'print' and d1.id=d2.id and d1.group=d2.group);
J'ai mis à jour la question. Pouvez-vous s'il vous plaît répondre sur la base de ma question mise à jour?
Une liste des identifiants de périphérique pour les périphériques uniquement utilisés pour l'impression pour un groupe particulier. P>
ID group FUNCTION date(YYYY-MM-DD) 2 a print 2020-06-28 3 a print 2020-06-30
Quelle base de données utilisez-vous?
Une fois que vous avez compris quel RDBMS vous utilisez, veuillez vous reporter à meta.stackoverflow.com/questions/333952/...