2013-06-12 37 views
1

所以我有這個疑問:爲什麼postgres不能理解對派生列的引用?

select 
    id, 
    unnest(suppliers) as suppliercode 
from table1 t1 
left join table2 t2 
on t1.suppliercode = t2.suppliercode 

的Postgres無法理解什麼叫:

on t1.suppliercode = t2.suppliercode 

t2.suppliercode造成混亂。爲什麼?你如何顯式調用新的派生列?

+2

'suppliercode'不是t1'的'部分 - 'suppliers'是。你想把這個東西包裝在別名子查詢或'with'語句中以使其工作。 –

+2

以下SQL系統的所有標準都會有類似的問題。從邏輯上講,'SELECT'子句在* FROM子句(包括連接)之後處理得很好。 –

+1

「* t2.suppliercode引起混淆。爲什麼?*」 - 因爲這是SQL標準定義它的方式。 –

回答

1

t1.suppliercode表示「來自表t1的列suppliercode」。而你的表t1沒有這樣的列。

試着這麼做:

select * 
from(select t1.id, 
      unnest(t1.suppliers) as suppliercode 
    from table1 t1) sub 
left join table2 t2 
on sub.suppliercode = t2.suppliercode 
+0

這就是我最終做的事情,但我真正想知道的是如何顯式調用新的派生列? – coderama

+3

@coderama你不這樣做,它只是不受支持。您*必須*在'FROM'或'WITH'查詢(公用表格表達式)中使用子查詢。 –

相關問題