回答編集履歴

7

変更

2016/08/22 04:09

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -84,4 +84,4 @@
84
84
 
85
85
 
86
86
 
87
- 最後のはMysqlの関数を評価する順番が保障されていないとのご指摘を受けましたので、無効としてください。concatにおけるパラータの評価の順番は保障されていない為、最後の部分が先に行われる事が有ると言う事です。ご指摘有難うございます。
87
+ 最後のはMysqlの関数を評価する順番が保障されていないとのご指摘を受けましたので、無効としてください。1ステートント中変数評価の順番は基本的には保障されていない為、最後の部分が先に行われる事が有り得ると言う事です。ご指摘有難うございます。

6

訂正します

2016/08/22 04:09

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -64,7 +64,7 @@
64
64
 
65
65
 
66
66
 
67
- こんな事もMySQLは出来るんですね!
67
+ こんな事もMySQLは出来るんですね!(改定=>無保証)
68
68
 
69
69
  ```sql4
70
70
 
@@ -81,3 +81,7 @@
81
81
  mid(ID1,3,4)), ID2=(@col:=ID2);
82
82
 
83
83
  ```
84
+
85
+
86
+
87
+ 最後のはMysqlの関数を評価する順番が保障されていないとのご指摘を受けましたので、無効としてください。concatにおけるパラメータの評価の順番は保障されていない為、最後の部分が先に行われる事が有ると言う事です。ご指摘有難うございます。

5

追加

2016/08/22 03:47

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -59,3 +59,25 @@
59
59
 
60
60
 
61
61
  ご指摘を反映しようと、せめてID2の順番でabc...になる様にしましたが、後ろでS001が現れると困る。
62
+
63
+
64
+
65
+
66
+
67
+ こんな事もMySQLは出来るんですね!
68
+
69
+ ```sql4
70
+
71
+ SET @row=0;
72
+
73
+ SET @col=null;
74
+
75
+ UPDATE tableX
76
+
77
+ SET ID1=concat(mid(ID1,1,1),
78
+
79
+ mid('abcdefghijklmnopqrstuvwxyz',if(@col=ID2,@row,(@row:=@row+1)),1),
80
+
81
+ mid(ID1,3,4)), ID2=(@col:=ID2);
82
+
83
+ ```

4

変更

2016/08/04 23:22

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -58,4 +58,4 @@
58
58
 
59
59
 
60
60
 
61
- ご指摘を反映しようと、せめてID2の順番でabc...になる様にしましたが、後ろでS0001が現れると困る。
61
+ ご指摘を反映しようと、せめてID2の順番でabc...になる様にしましたが、後ろでS001が現れると困る。

3

指摘に対応

2016/08/04 11:28

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
  substr('abcdefghijklmnopqrstuvwxyz',@i,1) as ID1,
30
30
 
31
- ID2 from (select @i:=0) as dum,(select distinct ID2 from table) t3) t2
31
+ ID2 from (select @i:=0) as dum,(select distinct ID2 from table order by 1) t3) t2
32
32
 
33
33
  set t1.ID1=concat(mid(t1.ID1,1,1),t2.ID1,mid(t1.ID1,3,4))
34
34
 
@@ -48,10 +48,14 @@
48
48
 
49
49
  substr('abcdefghijklmnopqrstuvwxyz',@i:=@i+1,1) as ID1,
50
50
 
51
- ID2 from (select @i:=0) as dum,(select distinct ID2 from table) t3) t2
51
+ ID2 from (select @i:=0) as dum,(select distinct ID2 from table order by 1) t3) t2
52
52
 
53
53
  set t1.ID1=concat(mid(t1.ID1,1,1),t2.ID1,mid(t1.ID1,3,4))
54
54
 
55
55
  where t1.ID2=t2.ID2;
56
56
 
57
57
  ```
58
+
59
+
60
+
61
+ ご指摘を反映しようと、せめてID2の順番でabc...になる様にしましたが、後ろでS0001が現れると困る。

2

追加

2016/08/04 11:27

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -35,3 +35,23 @@
35
35
  where t1.ID2=t2.ID2;
36
36
 
37
37
  ```
38
+
39
+
40
+
41
+ 改良版(結果は一緒)
42
+
43
+ ```sql3
44
+
45
+ update table t1,
46
+
47
+ (select
48
+
49
+ substr('abcdefghijklmnopqrstuvwxyz',@i:=@i+1,1) as ID1,
50
+
51
+ ID2 from (select @i:=0) as dum,(select distinct ID2 from table) t3) t2
52
+
53
+ set t1.ID1=concat(mid(t1.ID1,1,1),t2.ID1,mid(t1.ID1,3,4))
54
+
55
+ where t1.ID2=t2.ID2;
56
+
57
+ ```

1

訂正

2016/08/04 11:19

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -15,3 +15,23 @@
15
15
  set t1.ID1=t2.ID1 where t1.ID2=t2.ID2;
16
16
 
17
17
  ```
18
+
19
+
20
+
21
+ 間違えておりました訂正(一応動く)
22
+
23
+ ```sql2
24
+
25
+ update table t1,
26
+
27
+ (select @i:=@i+1 as row,
28
+
29
+ substr('abcdefghijklmnopqrstuvwxyz',@i,1) as ID1,
30
+
31
+ ID2 from (select @i:=0) as dum,(select distinct ID2 from table) t3) t2
32
+
33
+ set t1.ID1=concat(mid(t1.ID1,1,1),t2.ID1,mid(t1.ID1,3,4))
34
+
35
+ where t1.ID2=t2.ID2;
36
+
37
+ ```