두 개의 다른 테이블에서 테이블에 값을 삽입하는 방법은 무엇입니까?


12

나는 세 개의 테이블이

students table 
------------------------------------  
id(PK, A_I)  |  student_name | nationality

teachers table
------------------------------------
id(PK, A_I)  |  teacher_name |  email

classroom table
----------------------
id(PK, A_I)   | date   | teacher_id(FK to teachers.id)  |  student_id(FK to students.id)

나는 선생님의 (이름이 부여 된 경우 david, 예를 들어)와 (student_id 7예를 들어)와 삽입하도록 요청 teacher_idclassroom에 기초 테이블 id에서 teachers테이블, 나는 할 것이다 :

insert into classroom (date, teacher_id, student_id)
select '2014-07-08', id, 7
from teachers
where teacher_name = 'david';

학생 ID를 직접받지 않고 학생 이름 만 부여하면 어떻게됩니까? 교사의 이름은 'david'이고 학생의 이름은 'sam'이라고 가정합니다. 어떻게받을 수 있나요 teacher_id에서 teachers테이블과도 student_id으로부터 students에 테이블과 모두 삽입 classroom각각의 이름을 기준으로 테이블?

답변:


15

다음과 같이 쿼리를 작성합니다

insert into classroom (date, teacher_id, student_id)
select '2014-07-08', t.id, s.id
from teachers t,students s
where t.teacher_name = 'david'
and s.student_name = 'sam';

조심해. 이것은 직교 곱입니다. 이것에 접근하는 또 다른 방법은

select teacher_id into @tid from teachers where teacher_name = 'david';
select student_id into @sid from students where student_name = 'sam';
insert into classroom (date, teacher_id, student_id) values ('2014-07-08',@tid,@sid);

감사합니다. 여기에서 내부 조인을 사용할 수 있습니까?
Baba Kamdev

어떤의 필요성 INNER JOIN이후 teachers와는 students아무 외래 키 관계가 없습니다.
RolandoMySQLDBA

6

가장 쉬운 방법은 하위 쿼리를 사용하는 것입니다.

 INSERT INTO classroom(teacher_id,student_id)
 VALUES ((SELECT id FROM students WHERE s_name='sam'),
 (SELECT id FROM teacher WHERE t_name='david'));

1
INSERT INTO newtable(value1, value2, value3) 
SELECT value1N, value2N, value3N,(SELECT valueN4 FROM secondtable WHERE id='1') 
FROM firsttable WHERE id='1');

결과 양식을 firsttable로 value1N, value2N, value3N만들고 결과를 secondtable에서 가져옵니다.valueN4

결과:

  • 첫 번째 테이블 --- |username|password |name|--- (3 개의 값이 있지만 하나를 사용함)
  • 두 번째 테이블 --- |id_number|Adress|tel|--- (3 개의 값이 있으며 모두 사용함)
  • 쿼리 후 newtable은 채워질 것입니다 --- |id_number|Adress|tel|username|----- (두 번째 테이블에서 3, 첫 번째 테이블에서 1 :
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.