Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用自动增量值从两个不同的表插入到一个表中_Java_Mysql_Sql_Select_Insert - Fatal编程技术网

Java 使用自动增量值从两个不同的表插入到一个表中

Java 使用自动增量值从两个不同的表插入到一个表中,java,mysql,sql,select,insert,Java,Mysql,Sql,Select,Insert,我将从两个不同的表插入到一个表中: 在我的驾驶员表中,我需要将driverID作为外键driverID_FK插入到我的汽车表中 同时,我需要将制造商表中的品牌、颜色和车轮插入到汽车表中 我的桌子: DRIVER (driverID, name, age, ...) CAR (carID, driverID_FK, brand, color, wheel) MANUFACTURER (manufacturerID, brand, color, wheel) 我的driverID是一个自动增量

我将从两个不同的表插入到一个表中:

在我的驾驶员表中,我需要将driverID作为外键driverID_FK插入到我的汽车表中

同时,我需要将制造商表中的品牌、颜色和车轮插入到汽车表中

我的桌子:

DRIVER
(driverID, name, age, ...)

CAR
(carID, driverID_FK, brand, color, wheel)

MANUFACTURER
(manufacturerID, brand, color, wheel)
我的driverID是一个自动增量值。在我的web应用程序中,在我要插入到car表中的行之前或之后可能有其他条目,因此它不一定总是我的driver表中最后插入的行。制造商表中的品牌、颜色和车轮值也是如此

以下是我目前准备的SQL:

String name = //taken from another method...
int manufacturerID = //taken from another method...

String sql = "INSERT INTO car (driverID_FK, brand, color, wheel) 
+ SELECT driverID FROM driver WHERE name = ?,
+ SELECT brand, color, wheel FROM manufacturer WHERE manufacturerID = ? ;";

PreparedStatement psmt = connect.prepareStatement(sql);
psmt.setString(1, name);
psmt.setInt(2, manufacturerID);
psmt.executeUpdate();
psmt.close();

如果您有任何建议,请使用本插入页

。。选择语法:

INSERT INTO car (driverID, brand, color, wheel)
SELECT driverID, brand, color, wheel
FROM driver, manufacturer
WHERE name = ? AND  manufacturerID = ?

查询1:获取驱动程序ID:

SELECT driverID INTO @driverID
FROM driver
WHERE name = ?
插入先前@driverID的制造商信息:


当我测试它时,它工作了,但是它插入了相同的行4次。这和SQL有什么关系吗?因为我检查了其他代码中的所有地方,并且我的函数只被调用一次,所以它应该只插入一次行。这可能是查询。我只是略作猜测。追加限制1是否有帮助?是的,限制1使其仅插入一行。我很好奇在你的查询中,它在哪里插入了多行……作为一个逗号,它实际上是一个没有连接条件的连接。我将做一个更好的回答,因为我甚至不喜欢这个,我总是讨厌没有条件的连接。当使用Prepared语句时,我如何执行这两个单独的查询?我是否声明两个单独的prepare语句变量,然后分别执行每个变量?在同一个连接上声明两个单独的prepare语句。谢谢您的帮助。
INSERT INTO car (driverID, brand, color, wheel)
SELECT @driverID, brand, color, wheel
FROM manufacturer
WHERE manufacturerID = ?