1

我在现有表中添加了一个新列。我想用从另一个表中检索到的值填充它。

桌子:EXPORT

Name | email | employeeid | userid

桌子:USER

id |  name  | email  | idnumber

新列是EXPORT.userid,我想等于USER.id。请注意ididnumber 不一样-idnumber存储employeeidwhileid是一个自动增量 PK。USER.idnumber等于EXPORT.employeeid

我想EXPORT.userid填充USER.idwhen export.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
4

2 回答 2

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 的唯一键是什么?

于 2013-07-19T14:50:39.627 回答
0

尝试运行以下查询

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

如果您看到任何行,那么这就是您的问题。

例如,如果您有一个 USER 表,看起来像

id |  name    |      email         | idnumber
1  | icefresh | icefresh@what.ever | 100
2  | icefresh | icefresh@what.ever | 100

然后你的查询

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

将返回 1 和 2。为了使其工作,它只能返回 1 个值。

于 2013-07-19T15:16:01.553 回答