【MySQL】サブクエリを発行する際の注意。

自分用メモ。

・テーブルに対してデータを追加・更新する場合、サブクエリ内に同一テーブルを指定出来ない。

・そういう時はサブクエリ内のFrom句にテンポラリテーブルを指定する。

・サブクエリ内のFrom句はテンポラリテーブルとして扱うことが可能。

・テンポラリテーブルには「AS」キーワードで必ず名前をつけてあげないと怒られる。

・これで「Error 1093 (ER_UPDATE_TABLE_USED)」は回避できるハズ。

 

【MySQL】リモート接続している外部DBのデータを接続元のローカルディスクにCSV出力する方法。

WEBサーバーとDBサーバーが一緒の場合は「into outfile」文を用いることで
ローカルディスクにCSVエクスポートを行えるが、DBがリモート接続の別サーバーだとこれが出来ない。

そんな時は下記の様にすると幸せになれる模様。

mysql -u [ユーザー名] -p -h [DBサーバーホスト名] [DB名] -e "[実行するSQL文]" | sed -e 's/\t/,/g' > [出力CSVファイルパス]

とても素晴らしい神SQLだね。

 

【MySQL】シェルからSQLコマンドを送信する方法。

めも。

mysqlにログイン時、「-e」オプションに続けてSQLを記述すると
実行したいSQLをmysql側に送りつける事ができる。

mysql -u root -p db_name -e "select * from tbl_name where 1 = 1"

と言った具合。

 

【MySQL】文字列を繰り返す。

めも。

select repeat('hoge', 3)

↓

hogehogehoge

 

【MySQL】文字列の長さを求める。

めも。

select length('1234567890');

↓

10

 

【MySQL】文字列を検索する。

文字列の中から特定の文字が見つかるまでのインデックス番号を求める方法。

select locate('abc', '00000000abc0000000');

↓

9

 

【MySQL】文字列を切り抜く。

めも。

select substring('123456789', 2);

↓

23456789


select substring('123456789', 2, 5);

↓

23456

第3引数を指定しない場合、第2引数から最後までの文字列が返却される。
ちなみにMySQLの1文字目は0でなく1から始まるので注意されたし。

 

【MySQL】文字列を置換する。

めも。

select replace('hogehogehoge', 'o', '!!');

↓

h!!geh!!geh!!ge

分かりやすいね。