如何使用另一个表中的值插入表-MySQL内部联接

时间:2019-05-21 05:46:31

标签: mysql inner-join sql-insert insert-into

在这种情况下,我创建了2个表:

项目:

push

模块:

saveProduct.push is not a function

我已经将数据插入了项目表:

CREATE TABLE projects (
ID int(5) NOT NULL,
PROJECT_NAME varchar(50) NOT NULL
);

现在,我想将数据插入“模块”表中,但不插入ID_PROJECT。我想从“项目”表中插入PROJECT_NAME。当我尝试使用贝娄命令时:

CREATE TABLE modules (
ID_MODULE int(11) NOT NULL,
NAME varchar(50),
ID_PROJECT int(11) DEFAULT NULL
);

显示错误:

1054-字段列表中的未知列“ projects.PROJECT_NAME”

但是当我这样写的时候:

INSERT INTO projects (ID, PROJECT_NAME) VALUES
(1, 'BOX'),
(2, 'Duck')

它没有显示任何错误,但是没有在“模块”表中插入任何行记录。

我有一个问题,是否可以通过内部联接另一个表(内部联接“项目”表)插入“模块”表值?如果是,请告诉我该怎么办。寻求帮助。

例如:

在“模块”表中,我没有插入任何内容。但是要插入数据:

INSERT INTO modules (ID_MODULE, NAME, projects.PROJECT_NAME)
SELECT 1, 'S-BOX', projects.PROJECT_NAME
FROM modules INNER JOIN projects
ON modules.ID_PROJECT = projects.ID AND projects.PROJECT_NAME = 'BOX';

1 个答案:

答案 0 :(得分:0)

1)您的第一个查询不正确,尤其是这部分INSERT INTO modules (ID_MODULE, NAME, --> projects.PROJECT_NAME)。您不能从另一个不同的表中定义要插入的另一列。

2)您的第二个查询是正确的。但是,如果根据此处的示例,由于您的查询对INNER JOIN表为空,则将不插入任何数据。您可以尝试插入而无需执行modules,如下所示:

INNER JOIN

我认为上面的查询可以工作,但是您会看到以下消息:

INSERT INTO modules (ID_MODULE, NAME, ID_PROJECT)
SELECT 1, 'S-BOX', projects.PROJECT_NAME
FROM projects
WHERE projects.PROJECT_NAME='BOX';

因为如果您查看Warning Code : 1265 Data truncated for column 'ID_PROJECT' at row 1 的列数据类型为projects.PROJECT_NAME,而varchar(50)的数据类型为modules.ID_PROJECT。基本上,当您查看int(11)中插入的数据时,将看到modules.ID_PROJECT(或者也许是0),而不是NULL中的原始值。因此,您需要确保您的列数据类型匹配以保留原始数据。