Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle:使用另一个表中的值更新列_Sql_Oracle_Sql Update - Fatal编程技术网

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
是一个自动递增PK
USER.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语句中排除了该值。最后,这一个很好: