我有類似以下內容的查詢,查詢解釋
select * from T1 where abc in (select distinct abc from T2);
的情況是,有名爲abc的表T2沒有字段,所以內查詢會無效,但還是整個查詢返回輸出。
什麼是這種現象的原因?
我有類似以下內容的查詢,查詢解釋
select * from T1 where abc in (select distinct abc from T2);
的情況是,有名爲abc的表T2沒有字段,所以內查詢會無效,但還是整個查詢返回輸出。
什麼是這種現象的原因?
如果在t2
沒有列abc
,在子查詢中引用abc
將通過t1
尋找列abc
來解決。因此,該查詢最終被
select *
from T1
where t1.abc in (select distinct t1.abc
from T2);
這始終是真實的(假設T2
至少有1行t1.abc
不爲NULL。
這其中的原因有很多,你應該總是符合你列一個這樣,你會得到一個語法錯誤,而不是得到一個意外的引用到一個不同的表
從T1開始的abc對子查詢是可見的,並且可以在表T2的任何表達式中列出。
因此,對於T2中的每一行,將返回T1中當前行的abc值。
因爲你有不同的,子選擇將返回只有一行。因此
什麼實際上是「在ABC(美國廣播公司)」將永遠是真實的,所以你寫的有效
select * from T1;
本身內部查詢是無效的作爲一個相關的子查詢,它是有效的。 –