2016-12-15 14 views
-1

の一意のIDを挿入5.5 & 5.7、表には4列、 "A、B、C、D"MySQLはMySQLでは特定の列

a,b,c,d 
1,1,0,0 
1,1,0,1 
1,2,0,1 
1,3,0,1 

は、我々は別のものを追加できることをとにかくありとがある場合既存の表の列a & bのそれぞれの固有の組み合わせに基づいて、一意の「ID」列(intまたはbigint)を作成しますか?例えば:私は私が何かを逃した場合を除き、ここで動作するようには思えないAUTO_INCREMENT & UNIQUEを、試してみました

ID,a,b,c,d 
1,1,Joe,0,0 
1,1,Joe,0,1 
2,1,Peter,0,1 
3,1,Jan,0,1 

ID,a,b,c,d 
1,1,1,0,0 
1,1,1,0,1 
2,1,2,0,1 
3,1,3,0,1 

はまた、列Bと仮定すると、今の文字列です。どの教祖が啓発できますか?ありがとう!

答えて

1

中部!

CONCATとLPAD関数を使用して列aとbを結合できます。

LPADのような競合を回避することが重要である:

CONCAT('1','10') = '110' 
CONCAT('11','0' = '110' 



SELECT CAST(CONCAT(a,LPAD(b,10,'0')) as UNSIGNED) id 
    , a 
    , b 
    , c 
    , d 
    FROM table_a; 

または単に

UPDATE table_a SET id = CAST(CONCAT(a,LPAD(b,10,'0')); 
+0

おかげ@Pastorを!これは上の例では素晴らしいことです!しかし、INT/BIGINTで一意のIDを取得する方が良いでしょう。列 "b"が文字列の場合、この一意のIDでJOINを高速化できますか? – Chubaka

+0

"b"列が文字列の場合の上記の例を追加するだけです。あなたは啓発できますか? – Chubaka

1

abの各組み合わせに増分番号を割り当ててクエリを作成し、元のテーブルとUPDATEクエリで結合します。

UPDATE yourTable AS t1 
JOIN (SELECT a, b, @counter := counter + 1 AS id 
     FROM (SELECT DISTINCT a, b FROM yourTable ORDER BY a, b) AS x 
     CROSS JOIN (SELECT @counter := 0) AS var) AS t2 
ON t1.a = t2.a AND t1.b = t2.b 
SET t1.id = t2.id 
関連する問題