La requête est correcte si table_B n'a pas de colonne nommée ID_NO, mais que table_A a. Ensuite, vous auriez une sous-requête corrélée, où la sous-requête select ID_NO fait référence à l'attribut ID_NO externe de table_A (cela n'a aucun sens, mais est correct pour le compilateur).
Tenir compte du schéma suivant:
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);
Ensuite, la requête suivante compilera; mais il donnera toujours un résultat vide, parce que cela signifie en fait quelque chose comme où id_no pas (id_no):
select * from table_a where id_no not in (select id_no from table_b);
Lorsque vous traitez avec des sous-requêtes, je vous suggère d'utiliser les alias de table afin d'éviter un tel comportement involontaire . Par exemple, la requête suivante ne compile pas, et le compilateur vous donne l'indice ce qui est faux:
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'
Correction de l'erreur conduit alors à:
select * from table_a a where a.id_no not in (select b.other_id_no from table_b b);
s'il vous plaît fournir la table stucture – Jens
c'est un bon requête, si l'ID_NO de table_A avait un type différent de ID_NO à partir de table_B cela causerait un problème d'autres façons de fournir plus de détails. –