Oracle existiert Abfrage nicht wie erwartet - DB -Link -Fehler?
-
24-10-2019 - |
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).
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.