2014-06-08 48 views
0

我不是sql專家。我想下面就我的Oracle查詢SQLPLUS提示符下列在oracle中明確定義

 
select 0 AS initVal, 
loadTable.amount from 
accountsTable JOIN loadTable ON num=accNum , 
loadTable JOIN loanTable ON loadTable.numSeq=loanTable.numSeq 

運行,並獲得以下錯誤

 
column ambiguously defined, which is pointing to loadTable.amount in select clause. 

點點我能夠明白,有一種accountsTable JOIN loadTable ON num=accNum笛卡爾積和loadTable JOIN loanTable ON loadTable.numSeq=loanTable.numSeq後,它無法理解從哪個表中挑選loadTable.amount,因爲兩者都有此列的結果。 有沒有什麼辦法可以擺脫這個問題,而無需在loadTable.amount這兩個中間表之間指定另一個連接?

回答

2

這是您的查詢:

select 0 AS initVal, loadTable.amount 
from accountsTable JOIN 
    loadTable 
    ON num=accNum , 
    loadTable JOIN 
    loanTable 
    ON loadTable.numSeq=loanTable.numSeq; 

你的查詢有loadtable兩次,我不認爲你打算。而最後一個條件是重言式,因爲價值來自同一張桌子。此外,您應該使用縮寫的表別名 - 它使查詢更容易編寫和讀取。我覺得這是更接近你正在嘗試做的事:

select 0 AS initVal, lt.amount 
from accountsTable act JOIN 
    loadTable lt 
    ON act.num = lt.accNum JOIN 
    loanTable lot 
    ON lt.numSeq = lot.numSeq; 

作爲一般規則:決不在from語句中使用逗號。始終通過適當的join連接表格。

編輯:

如果你認爲你的查詢是「邏輯」是正確的,你應該把表的別名,並具體介紹一下加入:

select 0 AS initVal, lot1.amount 
from accountsTable act JOIN 
    loadTable lot1 
    ON act.num = lot1.accNum CROSS JOIN 
    loadTable lot2 JOIN 
    loanTable lnt 
    ON lot1.numSeq = lot2.numSeq; 

這些連接條件看上去無意義的我,尤其是因爲查詢只從一個表中抽取amount,所以第二個表似乎不被使用。

+0

哎等待分鐘..你從3轉換的查詢連接到2聯接。我確實打算3加入(2條件和一個使用逗號而沒有加入條件又名笛卡爾產品) – peeyush

+0

您應該編輯您的問題並顯示您的樣本數據和期望的結果。 –

+0

所以你有什麼可能意味着兩者都會給出相同的結果?我感覺到了。 – peeyush