2012-10-23 129 views
0

我有類似以下內容的查詢,查詢解釋

select * from T1 where abc in (select distinct abc from T2); 

的情況是,有名爲abc的表T2沒有字段,所以內查詢會無效,但還是整個查詢返回輸出。

什麼是這種現象的原因?

+0

本身內部查詢是無效的作爲一個相關的子查詢,它是有效的。 –

回答

2

如果在t2沒有列abc,在子查詢中引用abc將通過t1尋找列abc來解決。因此,該查詢最終被

select * 
    from T1 
where t1.abc in (select distinct t1.abc 
        from T2); 

這始終是真實的(假設T2至少有1行t1.abc不爲NULL。

這其中的原因有很多,你應該總是符合你列一個這樣,你會得到一個語法錯誤,而不是得到一個意外的引用到一個不同的表

0

從T1開始的abc對子查詢是可見的,並且可以在表T2的任何表達式中列出。

因此,對於T2中的每一行,將返回T1中當前行的abc值。

因爲你有不同的,子選擇將返回只有一行。因此

什麼實際上是「在ABC(美國廣播公司)」將永遠是真實的,所以你寫的有效

select * from T1;