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

両方のテーブルにデータがあります。テーブル 2 の score_high にテーブル 1 のスコア列を入力したいと考えています。やってみると

INSERT INTO Table2( score_high ) 
SELECT score
FROM Table1 

私は得る

> > MySQL は次のように述べています。

> #1062 - キー 2 の重複エントリ ''

明確で素人の説明をいただければ幸いです。ありがとうございました。

4

2 に答える 2

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 に答える
0

から始めましょう

INSERT INTO Table2( score_high ) 
SELECT score
FROM Table1  

table1 のスコアを table2 に挿入し、score_high 列のみを入力します。

質問: 邪魔になっている固有の列は何ですか?

table2 の定義を見てください。UNIQUE KEY が 2 つある

  • 主キー
  • ユーザー名

PRIMARY KEY は auto_increment 列であるため、除外されます。

ユーザー名のUNIQUE KEYはどのように邪魔になりますか?

スコア (100,000 など) だけを score_high 列に挿入すると、username の値はどうなりますか? ほとんどの場合、空白のフィールドです。ユーザー名が NULL の場合、1 つの行に入ることができます。別のスコアをテーブルに配置するときに別の行を挿入しようとするとどうなりますか? ユーザー名が空白の別の行。ユーザー名が空白の 2 つの行は、table2 に共存できません。

MySQLの発言を振り返る

1062 - キー 2 の重複エントリ ''

キー 2 はユーザー名の UNIQUE KEY です

エントリは '' (空の文字列) です

謎解き ( QED )

質問: どのように入力できますtable2か?

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

username は table1 で一意であるため、これは問題なく機能するはずです。table1 の行は、問題なく table2 に移動する必要があります。

于 2013-03-01T18:32:02.120 に答える