我是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
非常感谢任何帮助。谢谢。
答案 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);