我有一个答案
表,它有answers.id
,answers.question_id
,answers.value
和answers.report_id
answers.id
在常规插入时自动递增。
answers.question_id
的值介于1到10之间,因为有10个问题,但对表来说不是唯一的,并且依赖于report_id
列。
answers.report_id
用于引用单独表中的报表。
我要实现的是,如果对于特定的report_id
没有冲突的questions_id
,则插入新的记录。如果有冲突,则用新的值更新记录
到目前为止,我已经读到了UPSERT
我尝试了以下查询
INSERT INTO answers (id, value)
VALUES(8, 3)
ON CONFLICT (id) DO UPDATE SET value = EXCLUDED.value
WHERE answers.report_id = 55
查询工作正常,但问题是每次没有冲突时,我都必须为
id
分配一个唯一的值,我不知道下一个最好的id
是什么。
我的另一个想法是创建第二列,在其中存储另一个唯一的id,用于答案和冲突检查,并将
id
保持为自动增量。
我的第三个想法是,首先为特定的
报告运行
问题id
的选择问题。如果没有这样的结果,请运行常规插入,否则请更新现有插入。。。
理想情况下,我希望运行单个查询,而不是创建第二个唯一答案id列。
在我看来,您应该用两列创建一个唯一的约束:
ALTER TABLE answers ADD UNIQUE (report_id, question_id);
然后,您可以将该约束与冲突上的一起使用:
INSERT INTO answers (question_id, report_id, value)
VALUES (1, 2, 'gewonnen')
ON CONFLICT (report_id, question_id) DO UPDATE
SET value = EXCLUDED.value;
请注意,您不需要
WHERE
子句,因为这只与冲突行有关。
还要注意,我没有指定
id
,所以使用了自动生成的值。
我有一张像下面这样的桌子。我试图根据CTE中的值合并到此表中。但当我试图在出现冲突时更新表时,它无法获得CTE中的值 现在使用cte,我想在这个表中插入/更新记录。下面是我用来做同样的事情的代码。当记录已经存在于表中时,我想根据cte(cte_input_data.data_type_id)中的data_type_id值更新表,但它失败并出错。 它应该实现的是 > 如果cte_输入_数据。数据类型
我正在写一个数据挖掘程序,可以批量插入用户数据。 当前SQL只是一个普通的批量插入: 如果发生冲突,如何进行更新?我试过: 但它抛出
我试图在表中插入一行,带有一个自动递增字段,但我遇到了错误。该表的结构为: id:自动增量 级别:文本 概念:文本 . 在w3c中,我了解到要将新记录插入表中,我们不必为“自动增量”列指定值(将自动添加唯一值)。 我做错了什么?
我正在使用java中的MySQL库执行一个查询。在我的数据库结构中,有一列名为(主键,非空且自动递增)。通常在每次插入查询中,我都将值设置为,在查询执行后,它会增加最后一个id,但在java中这样做会给我异常。 这就是代码: 如何使用自动增量ID执行查询?
您好,我尝试使用mysqli从第一个表中获取autoincrement id,然后插入到第二个表中,这是我为每个表设计的数据库 表用户 表siswa 这就是我尝试过的 数据插入到用户表中,但不插入到siswa表中,对此有何建议? 编辑:被忽略的变量只($jkortu)现在修复,谢谢
问题内容: 我正在寻找这样的查询: id | int | 自动增量 varchar | 255 这样桌子就看起来像 1 | val1 2 | val2 3 | val3 … 除了id总是以每一行都结束而已。 我怎样才能做到这一点? 问题答案: