检查是否已将具有相同 ID 的相似行插入到 table?

Check if similar row with same ID is already inserted into table?

我有一个 Car table 列 carID, brand, color, price。我正在将 carIDcolor 复制到另一个 table Detail ,它有列 carID, finish, colorcarID 是来自 [=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);