2013-07-10 64 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语句中包含字段值。它仍然有点违反直觉,但真的很高兴知道。谢谢。 –