Sql Oracle:使用另一个表中的值更新列
我向现有表中添加了一个新列。我想用从另一个表中检索的值填充它 表:Sql Oracle:使用另一个表中的值更新列,sql,oracle,sql-update,Sql,Oracle,Sql Update,我向现有表中添加了一个新列。我想用从另一个表中检索的值填充它 表:导出 Name | email | employeeid | userid 表:用户 id | name | email | idnumber 新列是EXPORT.userid,我希望它等于USER.id。请注意,id和idnumber是不同的-idnumber存储员工id,而id是一个自动递增PKUSER.idnumber等于EXPORT.employeeid 当EXPORT.employeeid=USER.idnum
导出
Name | email | employeeid | userid
表:用户
id | name | email | idnumber
新列是EXPORT.userid
,我希望它等于USER.id
。请注意,id
和idnumber
是不同的-idnumber
存储员工id
,而id
是一个自动递增PKUSER.idnumber
等于EXPORT.employeeid
当EXPORT.employeeid=USER.idnumber
时,我想用USER.id
填充EXPORT.userid
如何使用与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
对于给定的电子邮件和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
或者在您的问题中添加一些示例数据。用户表和导出表的唯一键是什么?对于给定的电子邮件和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
或者在您的问题中添加一些示例数据。用户表和导出表的唯一键是什么?尝试运行以下查询
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 | 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个值。尝试运行以下查询
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 | 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个值。您可以尝试并搜索该错误,例如@icefresh:是否确定idnumber是用户表的主键,请再次检查它一次。您可以尝试并搜索该错误,例如@icefresh:是否确定idnumber是用户表的主键,请再次检查:返回多条记录是可以理解的,但问题是不同的,他将idnumber定义为用户表的主键,逻辑上不应返回多条记录record@GauravSoniidnumber不是用户的主键,它只存储用户id,idnumber存储员工id,如果id为PK,则DISTINCT将不起作用。所以主要的问题是-用户的唯一密钥是什么,似乎(idnumber,email)不是UK。用户的主键是id,而不是idnumber。从用户组中按idnumber选择idnumber,email,count()cnt,email的count()大于1。您得到了多少?返回三行。两个空的,只包含一个空格。一个具有实际值,我从update语句中排除了该值。最后,这一个工作得很好::返回多条记录是可以理解的,但问题是不同的,他将idnumber定义为用户表的主键,逻辑上不应该返回多条记录record@GauravSoniidnumber不是用户的主键,它只存储用户id,idnumber存储员工id,如果id为PK,则DISTINCT将不起作用。所以主要的问题是-用户的唯一密钥是什么,似乎(idnumber,email)不是UK。用户的主键是id,而不是idnumber。从用户组中按idnumber选择idnumber,email,count()cnt,email的count()大于1。您得到了多少?返回三行。两个空的,只包含一个空格。一个具有实际值,我从update语句中排除了该值。最后,这一个很好: