总结:当我得到一个
Error: UNIQUE constraint failed
时,有没有办法查看哪个value导致了唯一约束违规?
首先,我想说我已经用这个插入语句解决了我的问题。我不是在问如何修复 SQL,我是在问如何解决这种错误,这样我以后就不会花那么多时间了。
就是说,这是一个导致唯一约束错误的similar查询:
insert into a_table (id1, id2)
select d_table.id1,
'1' as id2
from b_table
join c_table on b_table.id = c_table.path_id
join d_table on c_table.id = d_table.id1
left join a_table on d_table.id1 = a_table.id1
where a_table.id1 is null
and b_table.path like 'X:\%'
order by 1;
运行这个给了我一个
Error: UNIQUE constraint failed: a_table.id1, a_table.id2
,我花了一个多小时来解决问题:我没有考虑过在我的select
中可以返回非唯一行。一旦我注意到这一点,修复就像将 select
更改为 select distinct
一样简单。我不确定这是否相关,但这违反了仅由这两列组成的 a_table 的主键。
现在我的问题是:是否有可能看到比我得到的更多的信息?具体来说,如果看到 a_table.id1
和
a_table.id2
的 values违反了约束,那真的很有帮助,但我在任何地方都找不到有关如何显示该信息的任何信息。
我想重申我不是在寻找像这个答案这样的解决方法,我想学习如何解决这个问题。
我正在使用 sqlite3 命令行客户端。