Die Abfrage ist korrekt, wenn Tabelle_B keine Spalte ID_NO hat, aber Tabelle_A hat. Dann hätten Sie eine korrelierte Unterabfrage, wobei die Unterabfrage ID_NO sich auf das äußere ID_NO-Attribut von table_A bezieht (das macht zwar keinen Sinn, ist aber für den Compiler korrekt).
Betrachten Sie das folgende Schema:
create table table_a (
id_no int
);
create table table_b (
other_id_no int
);
insert into table_a values (1),(2);
insert into table_b values (1),(3);
Dann wird die folgende Abfrage kompilieren; aber es wird immer ein leeres Resultat ergeben, weil es bedeutet, tatsächlich so etwas wie, wo id_no nicht in (id_no):
select * from table_a where id_no not in (select id_no from table_b);
Wenn mit Subqueries zu tun, würde ich vorschlagen Tabelle Aliase verwenden, um solche unbeabsichtigten Verhalten zu vermeiden . Zum Beispiel ist die folgende Abfrage nicht kompiliert, und der Compiler gibt Ihnen den Hinweis, was falsch ist:
select * from table_a a where a.id_no not in (select b.id_no from table_b b);
Error: Unknown column 'b.id_no' in 'field list'
die Fehler korrigieren führt dann zu:
select * from table_a a where a.id_no not in (select b.other_id_no from table_b b);
geben Sie bitte die Tabelle stucture – Jens
es ist ein richtiges Abfrage, wenn die ID_NO von Tabelle_A einen anderen Typ als ID_NO von Tabelle_B hatte, wird es ein Problem verursachen, andere Möglichkeiten bieten mehr Details. –