質問編集履歴

3

状況の変化

2022/07/09 04:23

投稿

hatte
hatte

スコア4

test CHANGED
File without changes
test CHANGED
@@ -29,8 +29,8 @@
29
29
  name varchar(255)
30
30
  );
31
31
 
32
- INSERT to newname(idx,name)
32
+ INSERT into newname(idx,name)
33
- select *
33
+ select
34
34
  id
35
35
  ,name
36
36
  ,case
@@ -43,8 +43,7 @@
43
43
  from test
44
44
 
45
45
  ```
46
- この段階で1064番のエラが返ってきます。
46
+ この段階で1136番のエラが返ってきます。
47
- 構文エラでしょうか。どこが間違っているのかよくわかりません。
48
- insert to newnameのあたりだ英語書かれているに見えます
47
+ カラムの数があっていないとあります。idx,nameとid,nameの指定なのでカラムの数は合っている思うのすが、どこを見落としているのでしょ
49
48
 
50
49
 

2

追加

2022/07/09 03:57

投稿

hatte
hatte

スコア4

test CHANGED
File without changes
test CHANGED
@@ -16,14 +16,35 @@
16
16
 
17
17
  ただし、一つ残すそのデータにもともと含まれていた空白はそのままにしたいです。田中 太郎でも田中   太郎でも、どれでも良いから一つ空白が入っていたままの状態で残したいです。
18
18
 
19
+
20
+ 考えたことは以下です。
21
+ ①nameテーブルから全ての空白をreplaceにより詰めたデータを、一時的なテーブルの中に追加する。(newnameというテーブル名)
22
+ ②newnameの中で重複するデータを見つけてidの若い方を残し、それ以外を削除する。
23
+ ③nameテーブルに於いてnewnameにあるidと同じidを見つけたら削除する。 という形式でコードを書けば、空白は元のままで重複する余分なデータを削除できるのではないかと考えたのですが、無理はないでしょうか。無理がなければ、 このようなコードはどのようにしたら書けるのでしょうか。
24
+
19
25
  試したコードは
20
- ```sql
26
+ ```mysql
27
+ create temporary table newname(
28
+ idx int,
29
+ name varchar(255)
30
+ );
31
+
32
+ INSERT to newname(idx,name)
33
+ select *
34
+ id
35
+ ,name
36
+ ,case
37
+ when instr(name,' ')>0
21
- update NAME set name = replace(name,'( | )','');
38
+ then replace(replace(name,' ',''),' ','')
39
+
40
+ when instr(name,' ')>0
22
- DELETE FROM NAME WHERE id NOT IN (SELECT min_id from (SELECT MIN(id) AS min_id FROM NAME GROUP BY name) AS tmp);
41
+ then replace(replace(name,' ',''),' ','')
42
+ end as newname
43
+ from test
23
44
 
24
45
  ```
25
- などです。ただこのコードは、最初のそれでは変更された行数が0でした。何故成功しない解らないのですが、成功したところで空白が詰められた状態のテーブルが出来上がる気がします。
46
+ この段階1064番エラ返ってきます。
26
- replaceでは正規表現?が使えないのでしょうか。一つの空白をなくすことはできましたが、それでは全角半角の区別、空白の連続回数が想定できません。何より最終的なテーブルには空白がない状態の文字列が残ってしまうことになります。
27
- どのようなコードを入力すれば、やりたいことが実現するでしょうか。
47
+ 構文エラでしょうか。どこが間違っているのかよくわかりません。
28
- 実現は不可能しょ
48
+ insert to newnameのあたりだと英語書かれているよに見えます
29
49
 
50
+

1

脱字

2022/07/07 13:53

投稿

hatte
hatte

スコア4

test CHANGED
File without changes
test CHANGED
@@ -25,4 +25,5 @@
25
25
  などです。ただこのコードでは、最初のそれでは変更された行数が0でした。何故成功しないのかが解らないのですが、成功したところで空白が詰められた状態のテーブルが出来上がる気がします。
26
26
  replaceでは正規表現?が使えないのでしょうか。一つの空白をなくすことはできましたが、それでは全角半角の区別、空白の連続回数が想定できません。何より最終的なテーブルには空白がない状態の文字列が残ってしまうことになります。
27
27
  どのようなコードを入力すれば、やりたいことが実現するでしょうか。
28
+ 実現は不可能でしょうか。
28
29