2012-06-19 137 views
2

大約一週前剛剛啓動SQL,我想知道爲什麼這給了我一個錯誤。 如果我在頂部選擇*,我可以看到ITEM_NUMBER以及是否使用了其他列名稱,但我看不到這一個。SQL - 從子查詢中選擇主鍵

我使用Oracle和ORDER_DELIVERABLES將ITEM_NUMBER作爲主鍵,而DIGITALPRODUCT_ORDER.ITEM_NUMBER將它作爲PF,我假設它是Primary Foreign?

如果任何人都可以幫助我,也許可以解釋一點,那會很棒。 謝謝!

SELECT ITEM_NUMBER 
FROM 
(
    SELECT * 
    FROM ORDER_DELIVERABLES 
    INNER JOIN DIGITALPRODUCT_ORDER 
      ON DIGITALPRODUCT_ORDER.ITEM_NUMBER = ORDER_DELIVERABLES.ITEM_NUMBER 
) 

回答

3

它返回什麼錯誤?

我懷疑這是一個模棱兩可的字段錯誤,因爲在select零件中使用*選擇2個表中的item_number,所以引擎不知道要採取哪一個。試試這個:

SELECT t.it 
FROM 
(
    SELECT o.ITEM_NUMBER it 
    FROM ORDER_DELIVERABLES o 
     INNER JOIN DIGITALPRODUCT_ORDER d ON d.ITEM_NUMBER = o.ITEM_NUMBER 
) t 

至於評論,您的查詢實際上可以做到這樣:

SELECT o.ITEM_NUMBER 
FROM ORDER_DELIVERABLES o 
     INNER JOIN DIGITALPRODUCT_ORDER d ON d.ITEM_NUMBER = o.ITEM_NUMBER 
+0

雖然這個版本使得再選擇毫無意義...... – Neil

+0

是的,我tryed到*正確的只有* ...但你說得對,我要添加一些信息 – Sebas

+0

標識他只選擇項目數,他可以用ORDER_DELIVERABLES中的'SELECT o.ITEM_NUMBER'替換一個存在子句的連接(這非常昂貴)o WHERE EXISTS(SELECT NULL FROM DIGITALPRODUCT_ORDER d WHERE d.ITEM_NUMBER = o.ITEM_NUMBER)'。 – corsiKa

0

你必須考慮在兩個層面:

1)讓我們獲取從主鍵ORDER_DELIVERABLES:

SHOW INDEX FROM ORDER_DELIVERABLES 

2)讓我們建立它到主查詢

​​

這個邏輯基於MySQL,但我確定如果你查閱Oracle手冊,你可以找到如何從表中訪問主鍵而不用瘋狂連接:)。

+0

顯示索引不僅顯示主鍵 – Sebas