0

好的,所以这个问题已经在这里被问死了,但我仍然没有找到实际的 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

两个表中都有数据。我想用表一的分数列填充表二的 score_high。当我尝试

INSERT INTO Table2( score_high ) 
SELECT score
FROM Table1 

我明白了

> > MySQL 说:

> #1062 - 键 2 的重复条目 ''

一个清晰的,外行的,解释将不胜感激。谢谢你。

4

2 回答 2

0

让我们从

INSERT INTO Table2( score_high ) 
SELECT score
FROM Table1  

您正在将 Table1 中的分数插入 Table2,仅填充 score_high 列

问题:什么独特的专栏阻碍了?

看table2的定义。它有两个唯一键

  • 首要的关键
  • 用户名

由于 PRIMARY KEY 是一个 auto_increment 列,因此排除了这一点。

用户名上的唯一键如何妨碍?

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

回顾 MySQL 所说的

1062 - 键 2 的重复条目 ''

键 2 是用户名上的唯一键

条目是 ''(一个空字符串)

谜团解开(QED

问题:如何填充table2

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

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

于 2013-03-01T18:32:02.120 回答
0
UPDATE Smuckers_Users SET score_high = (SELECT score FROM Smuckers_Info WHERE Smuckers_Users.username = Smuckers_Info.username)
于 2013-03-01T18:13:35.527 回答