こんにちは、常角です。
というか、初投稿なのではじめまして、です。
名前は、常角(つねずみ)と読みます。
ド田舎出身で、地元ではそこそこありふれた名前ですが、神戸に出てきてからは、弟たち以外に同じ苗字の人間に会ったことはないです。
加えて、大体初対面の人は「つねかどさん」と呼ぶので、毎回突っ込むのが億劫になります。(宅配の人とかに対しては、もう諦めています)
さて、記念すべき初投稿のネタなのですが・・・何にしよう。
考えてなかったので、書くことがないです。
では格好つかないので、以前仕事で使った、便利だと思ったSQL文を紹介します。
どんな事をするのかは、タイトルを見てね。
少しだけどういうことか説明すると、
DB上で、特定の値が重複しているデータが存在する場合、それを一つだけ残して、残りを削除するためには?という事です。
Delete t1
From 削除したいデータのテーブル t1
Where t1.IDなど数値系のフィールド(以下、【ID】とします) > (
Select Min(t2.ID)
From 削除したいデータのテーブル t2 (t1と同じテーブル)
Where
t1.重複の条件となるフィールドA = t2.重複の条件となるフィールドA
And (t1.重複の条件となるフィールドB = t2.重複の条件となるフィールドB
or (t1.重複の条件となるフィールドB Is Null And t2.重複の条件となるフィールドB Is Null)) ・・・ ※
And …
Having Count(*) > 1
)
t2のテーブルのほうで、重複したデータの一覧が取得されて、
t1のほうのWhere文の所で、そのうち1件だけを除外してくれるので、重複データの2件目以降だけを削除できます。
逆に、
Where t1.IDなど数値系のフィールド(以下、【ID】とします) > (
を
Where t1.IDなど数値系のフィールド(以下、【ID】とします) = (
に変えると、重複データを1件だけ取得してきますので、Select文などで、重複データを無視したデータの一覧を取得する時に便利です。
また、Where句で使うフィールドが、Nullを許可しているフィールドの場合、「=」だときちんと判定してくれないので※の部分のように、Is Nullをやってやらないとダメです。
IDの部分に使うフィールドは、ユニークな値を持っていて、必ず値が入力されているフィールドであれば、なんでもいいです。
そういった類の値が存在しない場合は、RowNum(ORACLE)で、番号を振ってあげればOKです。
⇒SQLServerの場合は、Row_Number
MySQLにはこういったものがないようなので、
set @row_num = 0;
select (@row_num:=@row_num+1) as row_number, col1
from tbl1;
といった具合に自前でつけてやらねばいけません。
但し、これを使うと処理が半端なく重くなるので、1000件程度ならいいけど、1万10万になると、数十分数時間、それ以上になる可能性があるので、あまりお勧めできないです。
なので、DBテーブルを作るときには、ユニークIDを一つつけてやりましょう。
他、残す1件をどれにするのかは、最初にきちんと決めておかないと泣きをみるハメになるかもしれないので、その辺は注意しましょう。
・・・・・・
SQLって、勉強し始めた頃は何がなにやらさっぱりわからなかったんですが、理解し始めてくると、パズルみたいで面白いですよね?(僕だけ?)
複雑な抽出がうまくいった時とか、おもわず、「よっしゃ!」ってなったり。
まあ、それはSQLに限った話ではないんですけどね。
これからも、ちょくちょく書いていくことになる・・・と思いますので、その時はまたお付き合いいただけるとありがたいです。
次書くのはJavaかPHPか、あるいはAndroidか・・・あるいはそういった技術的なことから離れるのか。
まあ何かはわかりませんが。。。
‘技術’ カテゴリーのアーカイブ
SQLで重複データを一つだけ残して削除する
Mac OS X+PHPでOracle接続
ご無沙汰しておりました。奥村です。
開発でMacOS X でApache+PHP環境から、Oracleデータベースに接続する必要がありました。
今回は接続するための設定をご紹介します。
- 環境
今回の設定での環境です。
Mac OS X 10.6.4
MacPorts 1.8.1
残りは MacPortsでインストールしたモジュールのバージョンです。
Apache 2.2.14
PHP 5.2.11
PEAR(pecl) 1.9.1
phpやapacheの設定はできている前提です。
(続きを読む…)
jQuery Extensions
こんにちは、沼田です。
とっても久々の投稿になります。
今回はjQueryのプラグインについてご紹介したいと思います。
「jQuery Extensions」
普段PHPをメインに扱っていることもあってか、JavaScriptでも変数の型を調べる関数を使いたくなることがあります。
自作すれば対応も可能ですが、せっかく便利なプラグインがあることですので、甘えて楽をしちゃいましょう。
jQuery Extensionsを使えば、PHPでいうところのis_string()やis_array()といった、型を調べるための関数が追加されるうえ、その他にも便利なユーティリティが色々追加されます。
導入は非常に簡単で、jQuery本体の後にjQuery ExtensionsのJSファイルを読み込ませるだけです。
<script type=”text/javascript” src=”./jquery.js”></script>
<script type=”text/javascript” src=”./jquery.extensions.js”></script>
読み見込ませると、以下の関数が使えるようになります。
(続きを読む…)
ヤマハRTXシリーズのSYSLOGをLinuxサーバで受信する
トマト@ネットワーク云々担当です。
ヤマハルータ、RTXシリーズのSYSLOGを、Linuxサーバで受信し、ログファイルとして出力する方法です。
ルータ本体に記録出来るログは、それぞれ以下の通りです。
RTX1000 最大500行
RTX1100 最大500行
RTX1200 最大10,000行
RTX1500 最大500行
RTX3000 最大500行
ルータ側で出力出来るログは、3種類あります。
・notice(IPフィルタ等で落としたパケット情報等)
・info(ISDNの呼制御情報)
・debug(ISDNおよび、PPPのデバッグ情報等)
※大量のデバッグメッセージが出力されます
HTML5をちょっと使ってみました。
こんにちは。最近城めぐりが趣味な田中です。
近頃とても暑くなってきました。6月も後半なので当然なのですが。。
そんな季節にも負けずに仕事も城めぐりもこなして行きたいです!暑い季節に天守閣目指して石垣を駆け上がると燃えますよ!
話は変わりまして、今回はHTML5について少し調べてみました。
調べてみますと、もうすでに膨大な量の情報が。。とりあえず量がすごいので、基本的な部分と、form要素についてちょっとまとめてみました。
Adobe AIR2.0 NativeProcess使ってみました for Mac
こんにちは、矢野です。
Macの「ditto」コマンドで、ファイルを圧縮できるか試してみました。
※ dittoコマンドでファイルを圧縮すると、Macのファイル情報であるリソースフォークを含んだ形で圧縮できるんです。
(続きを読む…)
Google 日本語入力 (ベータ)
こんにちは、杉本です。
本日、朝BOSSからgoogle日本語入力の情報を教えてもらったので、
早速インストールしてみました。
(続きを読む…)
Google App EngineをEclipseでクラウド開発2
こんにちは。杉本です。
前回に引き続き、ローカルで開発したGoogle App Engine用のアプリをデプロイし、
公開する方法を紹介します。
(続きを読む…)
Google App EngineをEclipseでクラウド開発
Googleのクラウドコンピューティングサービスである「Google App Engine」が
今月、「Google App Engine for Java」としてJavaも対応されました。
当初は言語がPythonという事で、慣れない文法に敬遠気味でしたが、
今回Java版の提供という事で簡単なサンプルの開発例を紹介したいと思います。
JavaのIDEといえばEclipseという事で、Goolgleから開発用の「Google Plugin for Eclipse」があるのでそちらからインストールしてみたいと思います。
(続きを読む…)
WebFile Uploader(ベータ版)をリリースするにあたって。
WebFileUploader(ベータ版)をリリースすることになりました。
WebFile Uploaderについて
弊社WebFileサービスのアップロード作業をブラウザを開くことなく、「デスクトップ上で行ってしまおう」という代物です。
Adobe社製のAIRを使用して開発したものです。
(続きを読む…)





