2012-07-31 6 views
0

테이블이 2 개 있습니다. AuthUserSQL 쿼리 - 동기화 테이블

인증은 다음과 같습니다. 열 (소스) 18883 행

id | username | password 

사용자는 ff. 열 (대상) 18,868 행

id | username | first name | last name | email 

auth.id = user.id 
auth.username = user.username 

지금 어떤 이유로 User 표에는 이름이 누락 된 행이 있습니다. 누락 된 행을 찾아 User의 누락 된 행을 찾고 Auth에서 ID와 사용자 이름을 삽입하고 first name = 'fname', last name = 'lname', email = '[email protected] '을 삽입하는 스크립트를 만들고 싶습니다.

따라서 두 테이블의 행 수가 같고 동기화됩니다.

감사합니다.

+0

누락 된 각 행을 수동으로 찾고 삽입을 시도했습니다. – nambla

답변

1

누락 된 부분이 명확하지 않습니다. . . id 또는 username 또는 둘 다. 사용자 이름이 누락 된 것으로 가정하면 다음 쿼리가 사용자가 원하는대로 작업합니다.

insert into user(id, uesrname, firstname, lsatname, email) 
    select a.id, a.username. 'fname', lname', '[email protected]' 
    from auth a left outer join 
     user u 
     on a.username = u.username 
    where u.id is null 

사용자 테이블에 사용자 이름이 중복되어 있지 않은 것으로 가정합니다.

"id"라는 열이 두 테이블에서 동일한 값을 갖게되는 것은 이상한 것 같습니다. 데이터 구조를 재검토하여 이것이 사실인지 확인해야합니다. 종종 "id"는 자동 증가 기본 키가됩니다.

+0

둘 다 실제로 누락됩니다. – nambla

+0

그러나 두 테이블을 합성 키로 연결하는 키 또는 키로 충분한 한 필드입니까? –

+0

인증 ID는 키이지만 사용자 ID는 키가 아닙니다. 그냥 정식 ID와 사용자 이름을 얻습니다. auth id autoincrements와 같습니다. – nambla