【发布时间】:2019-05-21 05:46:30
【问题描述】:
在这种情况下,我创建了 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';
显示错误:
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';
它没有显示任何错误,但它没有向“模块”表插入任何行记录。
我有一个问题是否可以通过内连接另一个表(内连接“项目”表)插入“模块”表值?如果是,请告诉我该怎么做。感谢您的帮助。
例如:
在“模块”表中我没有插入任何东西。但是要插入数据:
ID_MODULE = 1
NAME = "S-BOX"
projects.PROJECT_NAME = "BOX" (which is inner joined on modules.ID_PROJECT = projects.ID)
【问题讨论】:
-
您的插入没有意义,因为这三个值总是相同的。一些示例数据在这里会很有帮助。
-
'可以通过内部连接插入“模块”表值' - 是的,但只有在模块中有一个条目可以连接时。我完全不清楚你想在这里做什么。
-
@P.Salmon 我想将值插入“模块”表中,但例如使用“项目”表中的值:而不是
ID_PROJECT我会尝试使用projects.PROJECT_NAME。为了清楚起见,我不想通过ID_PROJECT = 1插入。我正在尝试projects.PROJECT_NAME = "BOX" -
即使模块中有条目,查询也会失败,因为您试图将字符列(Project_name)插入到 int(id_project)中。
-
如果一列具有某种数据类型,那么它的外部数据类型具有微妙的不同就没有什么意义了。无论如何(幸运的是),INT 关键字后面括号中的数字几乎完全没有意义,应该省略。
标签: mysql inner-join sql-insert insert-into