SELECT DISTINCT不起作用

时间:2012-09-10 07:52:48

标签: mysql sql distinct

为什么此查询会产生“重复条目”错误?

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'

正如您所看到的,firm_tag_name_value有一个唯一索引,我使用DISTINCT选择,我正在截断tag_names中的所有现有数据。

什么会产生这个错误?

1 个答案:

答案 0 :(得分:16)

由于在collationsparim_firm_tag_names两个表上定义了不同的parim_marksona,因此可能会发生这种情况,因为使用distinct的字符串比较可能会在区分大小写且不区分大小写的情况下导致不同的值{{1} }值。

您可以使用此查询检查collation列:

collation

要避免此错误,您可以使用SHOW FULL COLUMNS FROM parim_marksona; SHOW FULL COLUMNS FROM parim_firm_tag_names; 将列sona的排序规则转换为列firm_tag_name_value的排序规则,同时从表COLLATE中选择不同的值。< / p>

假设将列parim_marksona整理为firm_tag_name_value

latin1_swedish_cs

这应该没有错误。

有关详细信息,请参阅手册Column Character Set and Collation