SELECT DISTINCT不起作用

Kri*_*ian 15 mysql sql distinct

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

TRUNCATE parim_firm_tag_names;
INSERT INTO parim_firm_tag_names (firm_tag_name_value) 
    SELECT DISTINCT sona 
    FROM parim_marksona;
Run Code Online (Sandbox Code Playgroud)

错误信息:

SQL错误(1062):重复条目'1 - ??????? ??????" 对于'firm_tag_name_value'键

正如你所看到的,firm_tag_name_value有一个唯一的索引,我使用DISTINCTselect,我正在截断所有现有的数据tag_names.

什么会产生这个错误?

Ome*_*esh 16

这可能会发生,因为collations两个表上的定义不同,parim_firm_tag_names并且 parim_marksona使用distinct的字符串比较可能会导致区分大小写和不区分大小写的collation值的值不同.

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

SHOW FULL COLUMNS FROM parim_marksona;
SHOW FULL COLUMNS FROM parim_firm_tag_names;
Run Code Online (Sandbox Code Playgroud)

要避免此错误,您可以使用,从列sona中将列的排序规则转换为列的排序规则,同时从表中选择不同的值.firm_tag_name_valueCOLLATEparim_marksona

假设列整理firm_tag_name_valuelatin1_swedish_cs:

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;
Run Code Online (Sandbox Code Playgroud)

这应该没有错误.

有关更多详细信息,请参阅手动列字符集和排序规则.