如何使用来自另一个 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_PROJECT
是 int(11)
。基本上,当您查看 modules.ID_PROJECT
中插入的数据时,您会看到 0
(或者可能 NULL
)而不是 projects.PROJECT_NAME = 'BOX'
中的原始值。因此,您需要确保您的列数据类型匹配以保留原始数据。
在这种情况下,我创建了 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_PROJECT
是 int(11)
。基本上,当您查看 modules.ID_PROJECT
中插入的数据时,您会看到 0
(或者可能 NULL
)而不是 projects.PROJECT_NAME = 'BOX'
中的原始值。因此,您需要确保您的列数据类型匹配以保留原始数据。