MySQL - 从3个不同的表中插入值

时间:2014-07-16 21:59:22

标签: mysql

我是MySQL和数据库的新手。我目前正在尝试使用默认值以及其他3个表中的值填充表格。

这只是我所拥有的内容的简要概述:

INSERT INTO person(firstName, height, weight) VALUES ('John', 10, 20);  
INSERT INTO address(street, city) VALUES ('8777 Road', 'Detroit');  
INSERT INTO building(name, addressID) SELECT 'Building1', ID FROM address;  
INSERT INTO map(personID, addressID, buildingID, name) SELECT ????

我不确定该怎么做最后一行。我知道我应该使用类似LEFT OUTER JOIN的内容,但我不确定如何通过尝试这样做来解决语法错误。

我目前有:

INSERT INTO map(personID, addressID, buildingID, name) SELECT person.ID, address.ID, building.ID, 'Name1' FROM person LEFT OUTER JOIN address LEFT OUTER JOIN building

非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

您的前两个查询没问题,但第三个问题遇到了麻烦。

INSERT INTO building(name, addressID) SELECT 'Building1', ID FROM address;

将插入名称'Building1'附加到DB中的每个地址ID,因此如果您有2个地址,它将插入2行,3个地址,3行等。 这肯定不是你想要的。 但是,您可以利用LAST_INSERT_ID()来获取每个表的新创建的ID。

这可能是您想要的(我添加了@name,因为您没有为地图指定名称)fiddle

SET @name = 'some map';

INSERT INTO person(firstName, height, weight) 
VALUES ('John', 10, 20);

SET @personID = LAST_INSERT_ID();

INSERT INTO address(street, city)
VALUES ('8777 Road', 'Detroit');

SET @addressID = LAST_INSERT_ID();

INSERT INTO building(name,addressID) 
VALUES ('Building1',@addressID);

SET @buildingID = LAST_INSERT_ID();

INSERT INTO map(personID, addressID, buildingID, name)
VALUES(@personID,@addressID,@buildingID,@name);