2013-05-09 2 views
1

그래서 빌드하려고하는 쿼리를 설명하기 위해 최선을 다할 것입니다.다른 쿼리의 결과를 기반으로 새 ID에 대한 중복 행을 삽입하십시오.

은 내가 관계형 ID에 대한 일부 데이터 (여러 행)가 user_records 전화 할게 테이블이, (테이블 사용자에서) 사용자 ID 말한다. 각 행마다 다른 행을 복제해야합니다. 내가 활성이 아니라 이미 존재하는 모든 사용자 ID에 대해이 작업을 실행하려면

INSERT INTO user_records (userId, column1, column2, ...) 
SELECT 10 as userId, column1, column2... 
FROM user_records 
WHERE userId = 1 

이 userId를 10

에 userId를 하나의 기존 행을 복사합니다 그러나 : 나는이를 실행할 수 있습니다 알고 이 테이블. 그래서 기본적으로 내가 먼저 쿼리를 실행하려면 :

SELECT userID 
FROM users 
WHERE users.active = 1 
AND NOT EXISTS ( 
SELECT * FROM user_records 
WHERE users.userId = user_records.userId) 

조인 사용하거나 2 개 개의 쿼리를 결합, 내가이 쿼리를 실행하고 사용자 ID의 일련의 행을 중복 있도록 이전 쿼리에서 (10)를 대체 할 수 ?

미리 감사드립니다.

답변

1

한 가지 방법은 생성하는 것입니다 CROSS JOIN : 이것은 사용자 아이디 1에서 데이터를 복사, 테이블에 존재하지 않는 각 userId를위한 user_records에 새 행을 삽입합니다

insert into user_records (userId, column1) 
select u.userId, ur.column1 
from user_records ur 
    cross join users u 
where ur.userId = 1 
    and u.active = 1 
    and u.userId not in (select userId from user_records); 

SQL Fiddle Demo

.

+0

감사합니다. 감사합니다. – Chewpers

+0

@mrust - np, 다행스럽게 도울 수있어! – sgeddes

관련 문제