我有一个包含4列的MySQL表:
personId(int)
dateX(date)
ratio(decimal 11,2)
closed(boolean, e.g. tintyint(1)).
personId和dateX是主键。 3个第一列是真正使用的列,第四列只是用作指示符,不应再修改此记录,因为此值已用于某些计算,因此它应保持静态。我正在使用此查询:
INSERT INTO ratioTable(personId,dateX,ratio) VALUES (:personId,:dateX,:ratio) ON DUPLICATE KEY UPDATE personId=:personId,dateX=:dateX, ratio=:ratio;
它运作得很好。但是,它不会考虑任何“封闭”记录。我试着这样做:
INSERT INTO ratioTable(personId,dateX,ratio) VALUES (:personId,:dateX,:ratio) ON DUPLICATE KEY UPDATE personId=:personId,dateX=:dateX, ratio=IF(closed=1,ratio,:ratio);
但它不起作用。如果有任何关闭= 1的记录,则不会更新任何记录。 我也尝试过在网上找到的其他类型的查询:
INSERT INTO ratioTable(personId,dateX,ratio) VALUES (:personId,:dateX,:ratio) ON DUPLICATE KEY UPDATE personId=:personId,dateX=:dateX, ratio=:ratio WHERE closed!=1;
但是这给了我一个MySQL错误。
请你指出我正确的方向,我做错了什么?我需要执行插入记录的查询,但如果已经有一个具有相同主键的记录,那么它应检查“已关闭”参数!= 1并更新此记录。我不想事先运行SELECT查询,我相信应该有一种方法只用一个MySQL查询来执行它。提前谢谢。
答案 0 :(得分:0)
根据您的逻辑,我认为主键应该是(personId, dateX, closed)
或shortestPath()
。我不能从你的描述中说出来。你想要吗:
根据问题中的逻辑,我猜(2)。如果(3),那么这可能不是正确的方法。