2013-07-10 3 views
0

ID, name, emailadvisorID을 포함하는 테이블 STUDENT이 있다고 가정합니다. 그리고 두 번째 테이블 ADVISOR에는 IDname을 포함한 필드가 있습니다. STUDENT.AdvisorID은 외래 키입니다. 학생을 삽입 할 때 ADVISOR을 가리키는 열쇠가 있어야합니다.INSERT INTO ... SELECT ... FROM ... 어디에서 작동합니까?

그러나 응용 프로그램에서 학생을 추가 할 때 ADVISOR 이름 만 있습니다. 즉, 특정 학생의 이름과 이메일뿐만 아니라 고문의 이름이있는 문자열이 있지만 Advisor ID는 없습니다.

어쨌든 나는 이것을 수행하는 방법에 대해 머리를 감쌀 수 없습니다. 나는 그것이 일반적인 상황임을 압니다. 그리고 저는 심지어 과거에 stackoverflow에서 한 두 개의 비슷한 질문을했습니다. 나는 우리가 INSERT INTO ... SELECT ... FROM ..에 대해 이야기하고 있다는 것을 알고있다. WHERE 절이 advisor.name = 'anAdvisorName'이라고 가정합니다. 그러나 삽입되는 정보 중 일부는 테이블에 있고 일부는 그렇지 않다는 사실에 고심하고 있습니다. (이러한 종류의 문장에 대한 토론은 삽입되는 모든 데이터가 두 번째 테이블에있는 경우를 중심으로하는 것 같아요. 내가 말한 것이 아닙니다.)

p.s. 간단, 중복 항목, 같은 이름을 가진 여러 자문 등에 대해 걱정하지 마십시오하려면

답변

6

한 가지 가능한 방법 :

insert into student (name, email, advisorID) 
    values (
     'Fred Smith', 
     '[email protected]', 
     (select id from advisor where name = 'Lord Voldemort')) 
0

당신이 결과, 예를 들어 테이블을 얻을 선택할 때 :

mysql> select 'Hello' AS first, 'Everyone' AS second; 
+-------+----------+ 
| first | second | 
+-------+----------+ 
| Hello | Everyone | 
+-------+----------+ 
1 row in set (0.00 sec) 

이러한 결과는이 예에서와 같이 다른 테이블의 데이터를 완전히 포함 할 필요는 없습니다.

SELECT의 결과를 다른 테이블에 직접 넣을 수 있습니다. 예 : 모든

INSERT INTO newtable 
SELECT 
    'Hello' AS first, 
    'Everyone' AS second 
3

우선 것과 같은 효과가있을 것입니다

INSERT INTO newtable 
    (first, second) 
VALUES 
    ('Hello', 'Everyone') 

, 당신은 그렇게 INSERT INTO SELECT를 사용할 필요가 없습니다. 먼저 Advison을 삽입하고 할당 된 ID을 확인한 다음 Student 엔티티를 삽입하는 동안 사용하십시오. 어쨌든 INSERT INTO SELECT를 사용하려는 경우

, 당신은 그런 식으로 작업을 수행 할 수 있습니다

INSERT INTO Student (name, email, advisorID) 
SELECT 'studentName', 'studentEmail', ID 
FROM Advisor 
WHERE advisorName = 'advisonName' 
+0

이 도움이됩니다. 나는이 문맥에서 SELECT 문이 항상 (다른 테이블에서) 뭔가를 선택하는 것을 포함한다고 생각 해왔다. SELECT 문에 필드 값을 직접 포함 할 수 있는지 알지 못했습니다. 그것은 여전히 ​​조금 직관력이 부족한 것 같지만, 정말로 잘 알고 있습니다. 고맙습니다. –

관련 문제