Frage

Ich bin völlig verblüfft über die Ergebnisse dieser Abfrage:

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
              )

Rückgabe: 1

Es gibt 0 Datensätze in company_users@colink.world mit STAT = '2473'. Warum kehrt es also für die existierenden zurück?

Wenn ich die Abfrage so ändere, gibt sie 0 zurück: 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'
              )

AKTUALISIEREN Okay, das ist wirklich komisch. Nur um zu sehen, was passieren würde, habe ich die Abfrage aus der anderen Datenbank ausgeführt (die von den DB -Links verwiesen) und gab unterschiedliche (korrekte) Ergebnisse.

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
                  )

Gibt 0 zurück (wie erwartet).

War es hilfreich?

Lösung

Schauen Sie sich den Erklärungsplan für die erste Frage an. Ich vermute, es gibt einen Fehler, und der Abfrageplan kann zeigen, wie ein ungültiges Umschreiben durchgeführt wird.

Andere Tipps

Die zweite Abfrage in Ihrer Frage ist etwas anders - sie sieht Cu.stat überhaupt nicht an, und daher wird die Tatsache, dass es mit Cu.stat = '2473' nichts gibt, nicht angesprochen. Welche Ergebnisse erhalten Sie, wenn Sie ausführen?

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

Ich denke, dies entspricht Ihrer ersten Abfrage ohne existierende Verwendung und sollte korrekte Ergebnisse liefern.

Teile und genieße.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top