2014-10-28 4 views
0

두 테이블, 즉 profiletable_1, profile은 부모 테이블이고 table_1은 자식 테이블입니다. 나는 두 테이블에 email 열이 있는데 내가하고 싶은 일은 자식 테이블 열 email에있는 '[email protected]'은 으로 1으로 부모 테이블 열의 모든 열을 업데이트해야합니다. 여기서 email 열은 [email protected]입니다.부모 테이블 업데이트

where 문에서 두 테이블의 기본 키를 모두 사용하지만 동일한 테이블이 아니기 때문에 실수가 발생합니다.

update profile 
    set record= (
       select table_1.record 
       from Table_1 
       where profile.profile_id = Table_1.profile_id 
      ) 

하지만 난 일을 알고 그 이하이 하나를 사용할 때 그것은 나에게 "Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >="

update profile 
    set record = (
       select table_1.record 
       from Table_1 
       where profile.email = Table_1.email 
      ) 

은 내가 어떻게 이메일 열 업데이트 작업이 아니라 기본 키 열을 바랍니다 오류를 줄

+0

쿼리는 어쩌면 TOP JOIN를 1 – mxix

+0

UPDATE로, 하나의 행을 반환해야합니다. – Mihai

답변

2

기록은 다음 이메일, 기록의 집합을 도출하고 갱신

with s as (select distinct email, record from table1) 
update t 
set record = s.record 
from profile t 
join s on s.email = t.email 

만약의를 들어, 이메일/위해 그것을 사용하는 이메일에 기능적으로 의존하는 경우 - &있다 레코드를 입력하면 조인에서 얻은 레코드는 보장되지 않습니다.

0

나는이 당신이 할 수 있습니다 무엇을 생각 :

update P 
set P.record= T.record 
from profile P 
Inner Join Table_1 T 
    ON P.profile_id = T.profile_id 

모든 행 전 T의 ProfileId와 일치하는 P는 T의 "Record"열의 값으로 업데이트되는 "Record"열을 가져옵니다.

JOIN의 다른 열을 사용하도록 수정할 수 있습니다. 코드의 SET 부분에서 업데이트 할 여러 열을 추가 할 수도 있습니다.

+0

위의 코드는 정상적으로 작동하지만 문제는 두 테이블의 profile_id가 서로 다른 레코드를 가지고 있기 때문에 모두 업데이트가 동일하다는 전자 메일을 사용하고 싶습니다. – blay

+0

@blay 그래서 JOIN에 대한 열이 있습니까 안 그래? – Mihai

+0

그게 이메일입니다. "subquery가 1보다 큰 값을 반환했습니다. 하위 쿼리가 =,,! =, <, <= , >,> =" – blay

0

이 테이블은 부모 - 자식 테이블이므로 일부 조인 조건이 있어야합니다. 나는 위의 대답에 언급 된 쿼리의 말에 WHERE 조건을 추가 할 필요가 있다고 생각 :

 update P 
     set P.record= T.record 
     from profile p 
     Inner Join Table_1 T 
     ON (Since parent-child, you must have a joining condition) 
     where p.email = t.email