2015-11-12 64 views
0

我有一個SQL查詢,我想在子查詢中使用主查詢的列值之一。如何在子查詢中使用主查詢列值?

查詢是:

select **tool.item**, asset.id, tool.date, 
     (select freq from workorder 
     where type = 'CP' and itemnum = **tool.item**) freq, asset.pm 
from tool, 
    asset 
where too.num = asset.num 
    and asset.status = 'ACTIVE'; 

在此查詢我想在子查詢中使用獲取tool.item值。

item assetid date  pm freq 

A1 1  12-NOV-15 123 freq from workorder where itemnum ='A1' 
A2 2  13-NOV-15 124 freq from workorder where itemnum ='A2' 

你能幫我嗎? 在此先感謝。

+0

爲什麼不在工作單上使用連接? – flowit

+0

你確定你需要一個子查詢嗎?您期望每個工具項目有多少工單記錄?如果只有1個,那麼簡單的加入就可以了 –

回答

0

它類似於正常join,你需要加入你的子查詢與您的表列from部分 如果查詢返回null或者1倍的值如果返回多個值,你將有例外

它的作品確定
select tool.item, asset.id, tool.date, 
     (select freq from workorder 
     where type = 'CP' and itemnum = tool.item) freq, asset.pm 
from tool, 
    asset 
where tool.num = asset.num 
    and asset.status = 'ACTIVE'; 
1

我強烈建議您做兩件事情:

  • 學習正確的語法JOIN從未使用逗號s在from條款中。
  • 對錶別名使用縮寫。

所以,編寫查詢爲:

select t.item, a.id, t.date, 
     (select wo.freq 
     from workorder wo 
     where wo.type = 'CP' and wo.itemnum = t.item 
     ) as freq, 
     a.pm 
from tool t join 
    asset a 
    on t.num = a.num 
where a.status = 'ACTIVE'; 

相關子查詢是子查詢使用列從外部查詢的查詢。在這種情況下,關聯使用where子句中的t.item。當使用相關的子查詢時,我非常非常強烈地建議你總是使用表別名。列名錯誤很容易,而且這些問題很難找到。

相關問題