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. 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? p> merci d'avance. p> p>
4 Réponses :
Vous pouvez utiliser un code> Joindre complet code> pour obtenir des incompatibles: Cela affichera les paires qui se trouvent dans une table mais pas l'autre. P> p>
oui cette requête fonctionne mais je ne sais pas pourquoi ma requête ne fonctionnait pas comme on m'y attendait
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. P>
Merci cela a eu du sens maintenant.
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
/
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" p>
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