检查是否已将具有相同 ID 的相似行插入到 table?
Check if similar row with same ID is already inserted into table?
我有一个 Car
table 列 carID, brand, color, price
。我正在将 carID
和 color
复制到另一个 table Detail
,它有列 carID, finish, color
(carID
是来自 [=13 的外键=] table 而 finish
列不是 NULL
).
我有一个SQL准备好的声明:
public void insertToDetail(int carID, String finish){
String sql = "INSERT INTO detail (carID, finish, color) SELECT ?, ?, color FROM car WHERE carID = ?;";
PreparedStatement psmt = connect.prepareStatement(sql);
psmt.setString(1, carID);
psmt.setInt(2, finish);
psmt.setInt(3, carID);
psmt.executeUpdate();
psmt.close();
}
我如何检查我的 Detail
table 中是否没有插入完全相同的 carID
值?
我试过类似的方法:
"INSERT INTO detail (carID, finish, color)
SELECT ?, ?, color FROM car
WHERE NOT EXISTS {
SELECT carID
FROM detail
WHERE carID = ?
} ;";
它给了我错误:
MySQLSyntaxError You have an error in your SQL syntax; check the
manual that corresponds to your MySQL server version for the right
syntax to use near '{ SELECT carID FROM detail WHERE carID = 123 }' at
line 1
你的sql有语法错误,需要将{}
改成()
并去掉最后的;
所以改变
"INSERT INTO detail (carID, finish, color) SELECT ?, ?, color FROM car WHERE NOT EXISTS {
SELECT carID FROM detail WHERE carID = ?;";
到
"INSERT INTO detail (carID, finish, color) SELECT ?, ?, color FROM car WHERE NOT EXISTS (
SELECT carID, finish, color FROM detail WHERE carID = ?)";
您尝试编写的查询是:
INSERT INTO detail (carID, finish, color)
SELECT ?, ?, color
FROM car
WHERE NOT EXISTS (SELECT carID
FROM detail
WHERE carID = ?
) ;
然而,NOT EXISTS
是错误的做法。让数据库做检查。所以创建唯一索引:
CREATE UNIQUE INDEX unq_detail_carid on detail(carID);
这将在 table 中生成重复的汽车 ID。如果生成重复项,insert
将 return 出错。
为防止错误,请使用 ON DUPLICATE KEY UPDATE
:
INSERT INTO detail (carID, finish, color)
SELECT ?, ?, color
FROM car
ON DUPLICATE KEY UPDATE carID = VALUES(carID);
我有一个 Car
table 列 carID, brand, color, price
。我正在将 carID
和 color
复制到另一个 table Detail
,它有列 carID, finish, color
(carID
是来自 [=13 的外键=] table 而 finish
列不是 NULL
).
我有一个SQL准备好的声明:
public void insertToDetail(int carID, String finish){
String sql = "INSERT INTO detail (carID, finish, color) SELECT ?, ?, color FROM car WHERE carID = ?;";
PreparedStatement psmt = connect.prepareStatement(sql);
psmt.setString(1, carID);
psmt.setInt(2, finish);
psmt.setInt(3, carID);
psmt.executeUpdate();
psmt.close();
}
我如何检查我的 Detail
table 中是否没有插入完全相同的 carID
值?
我试过类似的方法:
"INSERT INTO detail (carID, finish, color)
SELECT ?, ?, color FROM car
WHERE NOT EXISTS {
SELECT carID
FROM detail
WHERE carID = ?
} ;";
它给了我错误:
MySQLSyntaxError You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{ SELECT carID FROM detail WHERE carID = 123 }' at line 1
你的sql有语法错误,需要将{}
改成()
并去掉最后的;
所以改变
"INSERT INTO detail (carID, finish, color) SELECT ?, ?, color FROM car WHERE NOT EXISTS {
SELECT carID FROM detail WHERE carID = ?;";
到
"INSERT INTO detail (carID, finish, color) SELECT ?, ?, color FROM car WHERE NOT EXISTS (
SELECT carID, finish, color FROM detail WHERE carID = ?)";
您尝试编写的查询是:
INSERT INTO detail (carID, finish, color)
SELECT ?, ?, color
FROM car
WHERE NOT EXISTS (SELECT carID
FROM detail
WHERE carID = ?
) ;
然而,NOT EXISTS
是错误的做法。让数据库做检查。所以创建唯一索引:
CREATE UNIQUE INDEX unq_detail_carid on detail(carID);
这将在 table 中生成重复的汽车 ID。如果生成重复项,insert
将 return 出错。
为防止错误,请使用 ON DUPLICATE KEY UPDATE
:
INSERT INTO detail (carID, finish, color)
SELECT ?, ?, color
FROM car
ON DUPLICATE KEY UPDATE carID = VALUES(carID);