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

时间:2018-11-30 03:16:57

标签: java mysql sql insert prepared-statement

我有一个- put: artifacts params: additional_tags: version/number build: mycode get_params: {skip_download: true} 表,其中有Car列。我正在将carID, brand, color, pricecarID复制到另一个具有列color的表Detail(其中carID, finish, colorcarID表的外键, Car列不是finish)。

我有一条SQL预准备语句:

NULL

如何检查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(); } 表中是否尚未插入完全相同的carID值?

我尝试过类似的事情:

Detail

它给了我错误:

  

MySQLSyntaxError您的SQL语法有错误;检查   与您的MySQL服务器版本相对应的手册   在以下位置使用语法'{   第1行

2 个答案:

答案 0 :(得分:1)

您的SQL语法错误,需要将boolean isIn(char c, char[] word) { return IntStream.range(0, word.length).anyMatch(i -> word[i] == c); } 更改为 a = [ {'product_name':'coca-cola','qty':2}, {'product_name':'pepsi','qty':2}, {'product_name':'coca-cola','qty':1}, {'product_name':'coca-cola','qty':1}, {'product_name':'coca-cola1','qty':1}, {'product_name':'pepsi','qty':2} ] totals = {} for sale in a: if sale['product_name'] in totals.keys(): totals[sale['product_name']] += sale['qty'] else: totals[sale['product_name']] = sale['qty'] b = [] for product_name, qty in totals.items(): b.append({'product_name':product_name, 'qty':qty}) 并在末尾删除{}

所以改变

()

;

答案 1 :(得分:1)

您要编写的查询是:

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);

这将在表格中生成重复的汽车ID。如果产生重复,insert将返回错误。

为防止错误,请使用ON DUPLICATE KEY UPDATE

INSERT INTO detail (carID, finish, color) 
    SELECT ?, ?, color
    FROM car 
    ON DUPLICATE KEY UPDATE carID = VALUES(carID);