2012-08-09 61 views
0

我們可以在Oracle中使用主鍵作爲「普通列」嗎? 我試圖做下面的查詢,但它不工作:我們可以使用主鍵作爲普通列嗎?

SELECT DATA_1,DATA_2 FROM MY_TABLE WHERE MY_TABLE_PK=10; 

我有一個無效標識符錯誤:

SQL Error: ORA-00904: "MY_TABLE_PK": invalid identifier 

怎樣才能在這些情況下,讀出的主鍵值?

非常感謝您的時間。

+2

你的問題是什麼?定義「不起作用」 – Ollie 2012-08-09 13:28:40

+2

然後,MY_TABLE_PK可能是您的主鍵INDEX的名稱,而不是您的主鍵列COLUMN的名稱。您只能在查詢中選擇列,而不是索引自己。發佈您的表結構(或索引創建語句)以獲取更多幫助。 – Ollie 2012-08-09 13:42:31

回答

4

你的主鍵索引基於在表的主鍵列如同所有constraints

您可以選擇主鍵COLUMN,但INDEX是數據庫中的一個獨立對象,本身不能被選中(您不會想要)。在你的情況下,主鍵約束本身可能會強化主鍵列的唯一性,並通過使用索引來減少搜索時間。

我認爲你的術語可能會有些困惑。

查詢的user_ind_columns字典視圖找到該指數是基於主鍵字段時,如果你不確定:

SELECT * 
    FROM user_ind_columns 
WHERE index_name = 'MY_TABLE_PK'; 

然後底層COLUMN(S)(可能有不止一個)添加到您的選擇查詢使其返回。

希望它有幫助...

0

我假設MY_TABLE的主鍵是MY_TABLE_PK。如果是這樣,您發佈的查詢從不讀取該列。試着改變你的查詢

SELECT MY_TABLE_PK, DATA_1 
    FROM MY_TABLE 
    WHERE MY_TABLE_PK = 10 

這是假設有地方MY_TABLE_PK包含10

分享和享受一行。

1

主鍵是一個普通的列,是的,你可以選擇或使用where子句中的列。

在你SQL中,你正在選擇DATA_1兩次 - 表中有一列名爲MY_TABLE_PK?

提供給主鍵的名稱顯示在解釋計劃中,但您選擇的數據將是列名稱,而不是主鍵名稱。

例如

CREATE TABLE supplier 
( supplier_id  numeric(10)  not null, 
    supplier_name varchar2(50) not null, 
    contact_name varchar2(50), 
    CONSTRAINT supplier_pk PRIMARY KEY (supplier_id) 
); 

這裏的主鍵被稱爲supplier_pk和使用列supplied_id,所以我們可以做一個選擇這樣

SELECT supplier_name from supplier where supplier_id=1234; 
相關問題