2013-07-19 79 views
1

我在現有表中添加了新列。我想用我從另一個表中檢索的值填充它。Oracle:使用另一個表中的值更新列

表:EXPORT

Name | email | employeeid | userid 

表:USER

id | name | email | idnumber 

新列是EXPORT.userid,我要等於出USER.id。請注意,ididnumber是不一樣的 - idnumber存儲employeeidid是自動遞增的PK。 USER.idnumber等於EXPORT.employeeid

我想填充EXPORT.useridUSER.idexport.employeeid = user.idnumber

我該怎麼做與Oracle兼容的SQL代碼?

我嘗試了以下操作,但它會引發錯誤。

UPDATE EXPORT 
    SET userid = (SELECT id 
       FROM USER 
       WHERE USER.idnumber = EXPORT.employeeid 
       and USER.EMAIL = EXPORT.email) 
WHERE EXISTS(SELECT 1 
      FROM USER 
      WHERE USER.idnumber = EXPORT.employeeid 
       and USER.EMAIL = EXPORT.email) 

但我得到這個錯誤

[Error] Execution (2: 19): ORA-01427: single-row subquery returns more than one row 
+1

您可以嘗試搜索該錯誤,例如http://stackoverflow.com/search?q=single-row+subquery+returns+more+than+one+row –

+0

@icefresh:你確定idnumber是用戶表的主鍵,請再次檢查它 –

回答

1

也許,這個子查詢返回多行指定的電子郵件地址和IDNumber中:

SELECT id 
       FROM USER 
       WHERE USER.idnumber = EXPORT.employeeid 
       and USER.EMAIL = EXPORT.email 

嘗試使用DISTINCT排除重複:

SELECT DISTINCT id 
       FROM USER 
       WHERE USER.idnumber = EXPORT.employeeid 
       and USER.EMAIL = EXPORT.email 

或添加一些示例數據給你的問題。表USER和EXPORT的唯一鍵是什麼?

+0

:返回多條記錄是可以理解的,但問題不同,他將idnumber定義爲用戶表的主鍵,邏輯上說不應該返回多條記錄 –

+0

@GauravSoni idnumber不是用戶的主鍵,它只是存儲用戶** idnumber存儲employeeid **但是,如果id是PK比DISTINCT無濟於事。所以主要問題 - USER的唯一鍵是什麼,似乎(idnumber,email)不是UK。 – Mikhail

+0

用戶的主鍵是id,而不是idnumber。 – icefresh

0

嘗試運行下面的查詢

SELECT * FROM (
    SELECT USER.idnumber, USER.EMAIL, COUNT(*) AS cnt 
    FROM USER 
    GROUP BY USER.idnumber, USER.EMAIL 
) c 
WHERE c.cnt > 1 

如果你看到任何行,那麼這就是你的問題。

舉例來說,如果你有一個用戶表看起來像

id | name |  email   | idnumber 
1 | icefresh | [email protected] | 100 
2 | icefresh | [email protected] | 100 

然後將查詢

SELECT id 
FROM USER 
WHERE USER.idnumber = EXPORT.employeeid 
    and USER.EMAIL = EXPORT.email 

將返回1和2.爲了爲它工作,它只能返回1值。

相關問題