質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Q&A

解決済

4回答

2805閲覧

【MySQL】unionで結合したテーブルをORDER BYでソートする際に、キーとなるカラムの一部データに含まれるスペースを削除してソートしたい

000mm

総合スコア6

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

0グッド

0クリップ

投稿2021/05/19 12:36

編集2021/05/19 12:39

前提・実現したいこと

権限:SELECTのみ

order by カラムa のカラムa内のデータに含まれる文頭のスペースを削除したい。

unionで結合した2つのテーブルをname2というカタカナの名前でソートしたいが、
2つのうちの1つのデータの方のname2に一部文頭に半角スペースを含んだものがあり、
order by でソートしようとするとスペースを含んだものが先頭に来てしまう。
イメージ説明
unionで結合
イメージ説明

name2でソートすると、スペースがあるものが上に来てしまう
イメージ説明

発生している問題・エラーメッセージ

・スペースがtrimで消せない(おそらくやり方が間違っている?)
・半角スペースだったと思うが、全角かもしれない(明日じゃないともう確認できない)

ERROR 1054 (42S22): Unknown column ‘name2’ in ‘order clause’

該当のソースコード

MySQL

1select 2 id, name1, trim(name2) 3from 4 テーブル1 5union 6select 7 id, name1, trim(name2) 8from 9 テーブル2 10order by name2;

試したこと

エラーメッセージでソートキーのカラムがないと出たので、
とりあえずname1でソートし確認したところ、
name2のスペースは消えていなかった。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

自己解決

こちらのスペースが消えなかった原因ですが、単純なスペースではなく
utf-8の空白文字(c2a0)という特殊文字でした。
こちらをリプレイスで変換することで解決いたしました。

投稿2021/06/09 04:06

000mm

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

全角か半角かわからない先頭のスペースをとりのぞくなら
本来入力時に先頭をトリムするサニタイズ処理をいれておけば良いのですが
生成列をつくってもよいかもしれません

SQL

1create table tbl(id int primary key ,name varchar(20),trim_name varchar(20) as (TRIM(TRIM(LEADING ' ' FROM name))),index(trim_name)); 2insert into tbl(id,name) values 3(1,'タナカ タロウ'), 4(2,'スズキ ジロウ'), 5(3,'イトウ サブロウ'), 6(4,' タカハシ ハジメ'), 7(5,'サトウ ゴロウ'), 8(6,' ワタナベ ロク');

投稿2021/05/20 09:06

yambejp

総合スコア114814

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

欲しいのはname2のトリム後の値、かつ、トリム後の値でソートしたいのであれば、以下のようにすればよいです。

SQL

1(SELECT id, name1, TRIM(name2) AS name2 FROM テーブル1 2 UNION 3 SELECT id, name1, TRIM(name2) AS name2 FROM テーブル2) 4ORDER BY name2;

トリム後の値でソートしたいが、欲しいのはname2のトリム前の値であれば、以下のようなクエリで実現できると思います。

SQL

1(SELECT id, name1, name2 FROM テーブル1 2 UNION 3 SELECT id, name1, name2 FROM テーブル2) 4ORDER BY TRIM(name2)

投稿2021/05/19 13:04

neko_the_shadow

総合スコア2230

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

sql

1select 2 id, name1, trim(name2) as trimed_name2 3from 4 テーブル1 5union 6select 7 id, name1, trim(name2) as trimed_name2 8from 9 b 10order by trimed_name2;

これでいかがでしょう。

投稿2021/05/19 12:58

saoyagi2

総合スコア210

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問