2013-07-19 4 views
1

기존 테이블에 새 열을 추가했습니다. 다른 테이블에서 검색 한 값으로 채 웁니다.오라클 : 다른 테이블의 값으로 열 업데이트

테이블 : EXPORT

Name | email | employeeid | userid 

테이블 : USER

id | name | email | idnumber 

새 열 내가 USER.id에게 동일 할 EXPORT.userid이다. ididnumber은 동일하지 않습니다. - idnumberemployeeid을 저장하고 id은 자동 증가 PK입니다. USER.idnumberEXPORT.employeeid과 같습니다.

export.employeeid = user.idnumber 일 때 EXPORT.useridUSER.id으로 채우려합니다.

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는 사용자의 기본 키가 아니며 user ** idnumber는 employeeid를 저장합니다. ** 그러나 ID가 DISTINCT보다 PK이면 도움이되지 않습니다. 그래서 주요 질문 - 사용자의 고유 한 열쇠는 무엇입니까 (idnumber, 이메일)는 영국이 아닌 것으로 보입니다. – 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 값.

관련 문제