在这种情况下,我创建了 2 个表:
项目:
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
);
我已将数据插入到项目表中:
INSERT INTO projects (ID, PROJECT_NAME) VALUES
(1, 'BOX'),
(2, 'Duck')
现在我想将数据插入到“模块”表中,但不使用 ID_PROJECT。我想从“项目”表中插入 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';
它显示了一个错误:
但是当我这样写时:
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';
它没有显示任何错误,但它没有向“模块”表插入任何行记录。
我有一个问题,是否可以通过内连接另一个表(内连接“项目”表)将值插入到“模块”表中?如果是,请告诉我该怎么办。感谢您的帮助。
例如:
在“模块”表中,我没有插入任何内容。但要插入数据:
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)
。除了要插入的表之外,您不能从另一个不同的表中定义另一列。
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
)而不是 中的原始值projects.PROJECT_NAME = 'BOX'
。因此,您需要确保您的列数据类型匹配以保留原始数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句