插入信息表(column_Name)从表2中选择column_name#1062 - 键2的重复条目''

时间:2013-03-01 18:05:26

标签: mysql sql database

好的,所以这个问题已经在这里被要求死了,但我还是没有找到实际的MySql语句答案。只是很多原因导致它不起作用。对于那些不熟悉SQL的人来说,我需要一个例子。这就是我所拥有的:

**Table One**

    key             bigint(4)               UNSIGNED                     auto_increment                         
    username        varchar(10)             utf8_general_ci                                          
    score           bigint(5)               UNSIGNED                                                
    password        varchar(60)             utf8_general_ci              NULL   

PRIMARY      PRIMARY 15      key
username     UNIQUE  15      username



**Table Two**
key             bigint(4)                               No      auto_increment                          
username        varchar(10)     utf8_general_ci         No                                   
score_old       bigint(11)                              No                                  
score_high      bigint(11)                              No  .

PRIMARY          PRIMARY    16   key
username         UNIQUE     16   username

两个表都包含数据。我想用Table One得分列填充Table Two score_high。 当我尝试

INSERT INTO Table2( score_high ) 
SELECT score
FROM Table1 

我得到了

> > MySQL说:

  

&GT; #1062 - 密钥2的重复条目<'

明确的,外行,解释将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:0)

UPDATE Smuckers_Users SET score_high = (SELECT score FROM Smuckers_Info WHERE Smuckers_Users.username = Smuckers_Info.username)

答案 1 :(得分:0)

让我们从

开始
INSERT INTO Table2( score_high ) 
SELECT score
FROM Table1  

您正在将表1中的分数插入表2,仅填充score_high列

问题:阻碍了哪一个独特的专栏?

查看table2的定义。它有两个独特的键

  • PRIMARY KEY
  • 用户名

由于PRIMARY KEY是auto_increment列,因此被排除。

用户名上的UNIQUE KEY如何妨碍?

当您在score_high列中只插入一个分数(比如100,000)时,用户名的值是多少?很可能是空白领域。一行可以使用NULL用户名进入。当您将另一个分数放入表格时尝试插入另一行时会发生什么?另一行用户名空白。具有空白用户名的两行不能在table2中共存。

回顾MySQL所说的话

  

1062 - 密钥2的重复条目<'

键2是用户名

上的UNIQUE KEY

条目为''(空字符串)

解开了神秘(Q.E.D.

问题:如何填充table2

INSERT INTO Table2( username,score_high ) 
SELECT username,score
FROM Table1  

这应该可以正常工作,因为用户名在table1中是唯一的。 table1的行应该在没有任何事件的情况下进入table2。