2010-08-16 4 views
2

데이터베이스 스키마를 변경하고 accounts/join 테이블 조인 테이블을 사용하여 사용자/계정 간의 관계를 1-1에서 many to many로 이동했습니다.many to many to one (mysql)

그래서 우리는

우리의 데이터는 아직 1-1이다 (USER_ID 및 ACCOUNT_ID) 계정, 사용자 accounts_users을 가지고, 우리는 다시 이동하기로 결정했다. 그래서 나는 다시 이동 SQL이 필요합니다

내가 사용 마이그레이션하려면

INSERT INTO accounts_users (account_id,user_id) SELECT id AS account_id, user_id AS user_id FROM accounts 

내가 시도 뒤로 이동하려면

UPDATE 
    accounts 
SET 
    user_id = ru.user_id 
FROM 
    accounts r, accounts_users ru 
ON 
    r.id = ru.account_id 


Update accounts 
Set r.user_id = ru.user_id 
FROM accounts r, accounts_users ru 
WHERE r.id = ru.account_id 


SELECT accounts_users.user_id 
    INTO accounts 
    FROM accounts_users 
    INNER JOIN accounts 
    ON accounts.id = accounts_users.account_id 

모든 이들의 어떤 종류의 SQL 오류를 제공합니다. 내 SQL은 모호하기 때문에 그것을 추측하고, 나는 일종의 선택 또는 분 또는 이와 비슷한 것을 필요로한다.

** 명확하게 말하자면, 필자는 여전히 데이터에 1-1 관계가 있음을 확신하지만 기존 테이블의 데이터를 원래 테이블로 되돌리기 위해 sql을 계산할 수는 없습니다. 내가 찾는 것은 accounts_users에서 데이터를 가져와 user_id를 계정 테이블에 넣는 작업 SQL입니다. 감사합니다, 조엘

답변

1

당신은 시도해 볼 수도 있습니다 (하나만이 알고) 1-1 후 바로 첫 번째 결과를 선택하는 경우 accounts_users에 많은 열을 가지고있어 지루하고 지루한데 이는 accounts으로 돌아 가야합니다. ID가있는 경우 문제가 발생하면 작동하지 않습니다 (따라서 이전 답변). 몇 개의 열이 있습니까?

+0

완벽하게 작동했습니다. 덕분에 1 톤! – Joelio

0

은 당신의 매핑은

UPDATE accounts 
    SET user_id = (SELECT user_id 
         FROM accounts_users 
         WHERE accounts_users.accounts_id = accounts.accounts_id); 

그건 꽤거야 ...

+0

예제 SQL을 제공 할 수 있습니까? – Joelio

+0

그 규칙 (예외?)에 대한 예외를 확인하는 것을 잊지 마세요. – Arafangion