2017-09-11 3 views
0

질문을 쓰는 방법을 잘 모르겠습니다.두 쿼리에서 관계 테이블에 데이터를 삽입하는 방법

나는이 3 개 테이블이 :

PICTURES 
id 
name 

MATERIALS 
id 
name 

PICTURES_MATERIALS 
picture_id 
material_id 

나는 사진과 5 개 재료의 수천과 사진의 대부분은 모든 자료를 가지고있다. 이 쿼리를 사용하여 약 100 장의 사진에 재료가 없다는 것을 알았습니다.

select p.id, p.name 
from pictures as p 
left outer join pictures_materials as pm on p.id = pm.picture_id 
where pm.picture_id is null; 

내가 지금하고 싶은 것은 pictures_materials에 각각의 그림이있는 각 그림에 대한 행을 삽입하는 것입니다. 자,이없이 재료와 사진의 일부입니다 가정 해 봅시다 :

picture_21, picture_22, picture_23 

을 내가 갖고 싶어 : 그것은 쿼리 INTO 하나의 INSERT에서이 작업을 수행 할 수

picture_21 material_1 
picture_21 material_2 
picture_21 material_3 
picture_21 material_4 
... 

인가?

답변

1

단일 INSERT INTO 쿼리에서이 작업을 수행 할 수 있습니까?

예!

카디 전 제품을 만들 정당한 이유가 하나 있습니다. 이렇게하려면 CROSS JOIN을 사용하십시오. 이 쿼리를 시도하십시오.

-- insert into picture_materials 
select dt.id, m.id 
from (select p.id 
from pictures as p 
left outer join pictures_materials as pm on p.id = pm.picture_id 
where pm.picture_id is null) dt 
cross join materials 

Select 문이 원하는 데이터를 반환하는지 확인한 후 INSERT 문을 주석 처리하고 다시 실행하십시오.

+0

감사합니다. 이것은 완벽합니다. 호기심에서 'dt'는 무엇을 의미합니까? – Carlo

+0

dt 파생 테이블 그것은 Sybase와 SQL Server에서 호출 될 수 있습니다. 오라클은 인라인 뷰라고 부릅니다. MySQL에서 무엇이라고 부르는 지 조회해야합니다. 기본적으로 쿼리 결과를 테이블로 참조하고 있습니다. –

+0

나는 그것이 어떻게 작동하는지 알았고, 나는 별칭이 무엇을 의미하는지 알 수 없었다. – Carlo