如何使用来自另一个 table 的值插入到 table - mysql 内连接

How to insert into table with values from another tables - mysql inner join

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

项目:

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

模块:

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

我已将数据插入项目 table:

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

现在我想将数据插入“模块”table,但不使用 ID_PROJECT。我想从“项目”table 插入 PROJECT_NAME。当我尝试使用波纹管命令时:

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';

显示错误:

1054 - 字段列表

中的未知列'projects.PROJECT_NAME'

但是当我这样写的时候:

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

它没有显示任何错误,但它没有向“模块”插入任何行记录table。

我有一个问题,是否可以通过内部连接另一个 table(内部连接“项目”table)将值插入“模块”table?如果是,请告诉我该怎么做。感谢您的帮助。

例如:

在“模块”中 table 我没有插入任何东西。但要插入数据:

ID_MODULE = 1
NAME = "S-BOX"
projects.PROJECT_NAME = "BOX" (which is inner joined on modules.ID_PROJECT = projects.ID)

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

2) 你的第二个问题是正确的。但是,如果根据您在此处的示例,将不会插入任何数据,因为您的查询 INNER JOIN with modules table 为空。您可以尝试插入而不像下面那样 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_PROJECTint(11)。基本上,当您查看 modules.ID_PROJECT 中插入的数据时,您会看到 0(或者可能 NULL)而不是 projects.PROJECT_NAME = 'BOX' 中的原始值。因此,您需要确保您的列数据类型匹配以保留原始数据。