我在现有表中添加了一个新列。我想用一个从另一个表中检索的值填充它。
表:EXPORT
Name | email | employeeid | userid
表:USER
id | name | email | idnumber
新列为EXPORT.userid
,我希望等于USER.id
。请注意,id
和idnumber
不一样 - idnumber
存储employeeid
,而id
是自动增量PK 。 USER.idnumber
等于EXPORT.employeeid
。
我希望在EXPORT.userid
时使用USER.id
填充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
答案 0 :(得分: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的唯一键是什么?
答案 1 :(得分: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个值。