2013-07-10 66 views
0

假設我有一個表STUDENT與列包括ID,name,emailadvisorID。我有第二個表ADVISOR與字段包括IDnameSTUDENT.AdvisorID是一個外鍵。插入學生時,您必須有一個指向ADVISOR的鍵。INSERT INTO ... SELECT ... FROM ...在哪裏工作?

但是,從應用程序中插入學生時,只有名稱爲ADVISOR。換句話說,您的字符串中包含特定學生的姓名和電子郵件,以及顧問的姓名,但不包含顧問ID。

不知何故,我不能讓我的頭纏着如何做到這一點。我知道這是一種常見的情況,我甚至在stackoverflow上發現了一個或兩個類似的問題。我知道我們正在討論INSERT INTO ... SELECT ... FROM .. WHERE。我假設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 
    (first, second) 
VALUES 
    ('Hello', 'Everyone') 

這將對作爲

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

首先同樣的效果,你不必使用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語句中包含字段值。它仍然有點違反直覺,但真的很高興知道。謝謝。 –