Question

Je suis complètement déconcerté par les résultats de cette requête:

select count(*) from my_tab mt
where  mt.stat = '2473'
  and mt.name= 'Tom'
  and exists (select * from company_users@colink.world cu, 
                personnel_records@colink.world pr
              where cu.user_id = pr.user_id
              and mt.name = pr.name
              and mt.stat = cu.stat
              )

Renvoie: 1

Il y a 0 enregistrements company_users@colink.world avec stat = « 2473 », alors pourquoi est-il vrai pour le retour existe?

Si je change la requête comme si elle retourne 0:

select count(*) from my_tab mt
where  mt.stat = '2473'
  and mt.name= 'Tom'
  and exists (select * from company_users@colink.world cu, 
                personnel_records@colink.world pr
              where cu.user_id = pr.user_id
              and mt.name = pr.name
              and cu.stat = '2473'
              )

UPDATE D'accord, cela est vraiment bizarre. Juste pour voir ce qui se passerait, j'exécuté la requête de l'autre base de données (celle référencée par la DB Liens) et lui a donné des résultats différents (correct).

select count(*) from my_tab@mylink.world mt
    where  mt.stat = '2473'
      and mt.name= 'Tom'
      and exists (select * from company_users cu, 
                    personnel_records pr
                  where cu.user_id = pr.user_id
                  and mt.name = pr.name
                  and mt.stat = cu.stat
                  )

Renvoie 0 (comme prévu).

Était-ce utile?

La solution

Jetez un oeil à l'expliquer plan pour la première requête. Je soupçonne qu'il ya un bug, et le plan de requête peut montrer comment une réécriture non valide est fait.

Autres conseils

La deuxième requête dans votre question est un peu différent - il ne regarde pas cu.stat du tout, et donc le fait qu'il n'y a rien avec cu.stat = « 2473 » est pas abordée. Quels sont les résultats que vous obtenez si vous exécutez

select count(*)
  from company_users@colink.world cu,     
       personnel_records@colink.world pr,
       my_tab mt
  where mt.stat = '2473' and
        mt.name = 'Tom' and
        pr.name = mt.name and
        cu.user_id = pr.user_id and
        cu.stat = mt.stat

Je pense que cela équivaut à votre première requête sans l'utilisation de EXISTE, et devrait fournir des résultats corrects.

Partager et apprécier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top