Domanda

Sono completamente sconcertato dai risultati di questa query:

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
              )

Returns: 1

Ci sono 0 record in company_users@colink.world con stat = '2473', quindi perché è tornando vero per il esiste?

Se cambio la query in questo modo, restituisce 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'
              )

Aggiorna Okay, questo è davvero strano. Solo per vedere cosa sarebbe successo, ho eseguito la query dall'altro database (quello a cui fa riferimento il DB Collegamenti) e ha dato diversi (corrette) risultati.

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
                  )

restituisce 0 (come previsto).

È stato utile?

Soluzione

Dai un'occhiata al piano di spiegare per la prima query. Ho il sospetto che ci sia un bug, e il piano di query può mostrare come un valido riscrittura è stato fatto.

Altri suggerimenti

La seconda query nella tua domanda è un po 'diverso - non guarda cu.stat a tutti, e quindi il fatto che non c'è nulla con cu.stat = '2473' non è indirizzato. Quali risultati si ottiene se si esegue

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

Credo che questo è equivalente alla tua prima domanda senza l'uso di esiste, e dovrebbe fornire risultati corretti.

Condividere e godere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top