0

假设我有一个表STUDENT,其中的列包括IDnameemailadvisorID。我有第二个表ADVISOR,其中包含ID和字段nameSTUDENT.AdvisorID是外键。插入学生时,您必须有一个指向ADVISOR.

但是,从应用程序中插入学生时,您只有一个ADVISOR姓名。换句话说,您有包含特定学生姓名和电子邮件以及顾问姓名的字符串,但没有顾问 ID。

不知何故,我就是无法理解如何做到这一点。我知道这是一种常见的情况,我什至发现过去在 stackoverflow 上问过一两个类似的 Q。我知道我们在谈论 INSERT INTO ... SELECT ... FROM .. WHERE。我假设 WHERE 子句是 advisor.name='anAdvisorName' 但我正在为插入的一些信息来自表而有些不是这一事实而苦苦挣扎。(关于这种说法的讨论似乎集中在所有插入的数据都来自第二个表的实例上。这不是我在说的。)

ps 为简单起见,请不要担心重复条目、多个顾问同名等问题。

4

3 回答 3

6

一种可能的方式:

insert into student (name, email, advisorID)
    values (
        'Fred Smith',
        'fred@example.com',
        (select id from advisor where name = 'Lord Voldemort'))
于 2013-07-10T16:07:47.627 回答
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'
于 2013-07-10T16:08:30.787 回答
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
于 2013-07-10T16:08:28.937 回答