2017-02-06 3 views
0

나는 이것을 수행하는 방법을 알고 있었지만 실습의 부족으로 인해 그것을 잃게되었습니다.MySQL : 부속 쿼리의 Where 절을 사용하여 업데이트

다른 이메일에서 일치하는 이메일을 비교하여 표에서 사용자 이름을 업데이트하려고합니다. 기본적으로 첫 번째 테이블에는 사용자 이름이 비어 있지만 다른 테이블에는 사용자 이름과 이메일이 채워져 있습니다. 여기 내 잘못 쿼리입니다 :

UPDATE users SET username = (SELECT Username FROM clients WHERE email in mail) 

이메일 내 고객 테이블에서입니다, 메일

+1

_one_ 레코드를 _one_ 값으로 업데이트하지 않으려면 외부 쿼리에도 WHERE 절이 필요합니다 ... – CBroe

+0

업데이트에서 조인 테이블 사용 방법을 확인해야합니다 –

+0

두 테이블의 구조를 모두 제공 할 수 있습니까? –

답변

1

내가 UPDATE로 가입 사용에 업데이 트를 제안,이 같은 일을해야 내 사용자 테이블에서입니다

UPDATE users 
    INNER JOIN 
    #your relationship/for example 
    clients ON (users.id = clients.user_id) 
SET 
    users.username = clients.email 
WHERE 
    users.username IS NULL 

ON 절이 사용자와 클라이언트 사이에있는 올바른 관계인지 확인하고 사용자의 모든 레코드를 클라이언트의 전자 메일로 사용자 이름 열을 업데이트해야합니다.

+0

여기 메일과 이메일은 동일합니다 코멘트에서 참조 –

+0

메일, 테이블에있는 이메일? 만약 그들이 동일하다면 당신이 할 수있는 일은 : clients ON (users.email = client.mail) – scx

0

명확한 답변을 얻기에 충분한 정보를 제공하지 않았습니다. 당신이 당신의 UPDATE 문에서 WHERE 절을 설정하지 않은 경우

, 당신은 당신이 가진 사용자 테이블을 업데이트 할 경우

을 원하는 아마되지 않습니다 같은 값, 모든 레코드를 업데이트합니다 의 정보가 클라이언트 테이블의 레코드와 일치하면 일치하는 입력란에 두 테이블을 모두 가입해야합니다. 이런 식으로 뭔가 :

UPDATE users U, clients C 
SET u.username = c.username 
WHERE U.email=C.email 
AND C.email IN (...) 

이 예에서 나는 이메일 주소가 2 개 테이블 (이 적응해야한다) 사이의 일치 필드라고 가정하고 대상 이메일 주소 목록을 제공하는 (당신은이를 제거 할 수 있습니다)