为什么此查询会产生“重复条目”错误?
TRUNCATE parim_firm_tag_names;
INSERT INTO parim_firm_tag_names (firm_tag_name_value)
SELECT DISTINCT sona
FROM parim_marksona;
错误消息:
SQL错误(1062):重复条目“1-??????????????????对于键
'公司名称'
如您所见,
firm_tag_name_value
有一个唯一的索引,我使用DISTINCT
select并从tag_names
中截断所有现有数据。什么会产生这个错误?
最佳答案
这可能是因为使用distinct进行字符串比较时,表collations
和parim_firm_tag_names
上定义的不同parim_marksona
可能导致区分大小写和不区分大小写的值不同。
可以使用此查询检查列的collation
SHOW FULL COLUMNS FROM parim_marksona;
SHOW FULL COLUMNS FROM parim_firm_tag_names;
为避免此错误,可以使用
collation
将column的collation转换为column的collation,同时从表sona
中选择不同的值。假设列的排序规则为:
TRUNCATE parim_firm_tag_names;
INSERT INTO parim_firm_tag_names (firm_tag_name_value)
SELECT DISTINCT sona COLLATE latin1_swedish_cs
FROM parim_marksona;
这应该是正确的。
有关更多详细信息,请参阅手册Column Character Set and Collation。
关于mysql - SELECT DISTINCT不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12347363/