0
votes

Oracle pourquoi existe-t-il une requête renvoie ce résultat

Je suis déroutant en utilisant une utilisation pour comparer deux données entre deux tables. Je m'attends à obtenir 0 rangée de la requête, mais cela renvoie certaines données. Je ne sais pas pourquoi. XXX

Cette requête renvoie toutes ci-dessus. J'essaie d'obtenir des différences. Ces colonnes sont des clés étrangères de certaines autres tables. Peut-il en rapport avec les dossiers d'autres table? xxx

merci d'avance.


2 commentaires

Quelles différences? Quels résultats voulez-vous?


Ces deux données sur les deux table sont égales. Je m'attends à ne voir aucune donnée de la requête existante


4 Réponses :


1
votes

Vous pouvez utiliser un Joindre complet pour obtenir des incompatibles: xxx

Cela affichera les paires qui se trouvent dans une table mais pas l'autre.


1 commentaires

oui cette requête fonctionne mais je ne sais pas pourquoi ma requête ne fonctionnait pas comme on m'y attendait



1
votes

Pour la ligne mère "1", la ligne d'enfant "2" satisfait à la clause existante. Pour la rangée parente "2", la rangée d'enfants "1" satisfait à la clause existante. Donc, les deux rangées sont retournées.


1 commentaires

Merci cela a eu du sens maintenant.



0
votes

Une autre option dans Oracle consiste à utiliser le mot-clé moins code> et à créer deux requêtes différentes, A moins b code> et B moins a code>, comme celui-ci :

with
q1 as (
  -- could be an arbitrarily complex query
  select main_rule, child_rule from scoredef_detail
),
q2 as(
  -- another arbitrarily complex query...columns must match q1
  select main_rule, child_rule from scoredef_detail_at
)
-- Can leave this part untouched
select 'in Q1 but not Q2' as description, q1.* from q1
  minus
select 'in Q1 but not Q2' as description, q2.* from q2
union
select 'in Q2 but not Q1' as description, q2.* from q2
  minus
select 'in Q2 but not Q1' as description, q1.* from q1
/


0 commentaires

0
votes

La raison pour laquelle votre requête d'origine échoue et renvoie donc que les données sont que vous disposez de 2 lignes de qualification (515, 516) et (515, 517) qui existent chacune dans les deux tables. Lorsqu'il est positionné sur l'un ou l'autre de votre critère "s.main_rule = sa.main_rule et (S.child_rule <> SA.CHILD_RULE)" Retourne l'autre. Lorsqu'il est positionné sur S (515, 516) et évaluer SA (515, 517) que l'expression devienne "515 = 515 et 516 <> 517" qui évalue vrai et que le prédicat existe donc est donc en vrais que la ligne est sortie. Le même scénario. se produit lors de l'évaluation (515, 517).
@Gordonlinoff Query retourne ce que vous désirez parce qu'il le dit "Montrez les paires qui sont dans une table mais pas l'autre"


0 commentaires