FrontPage

SQL Tips

複数のデータを行方向に並べる

PostgreSQLで試すと以下のようになる。

db=# SELECT 'ABC' UNION ALL SELECT 'DEF' UNION ALL SELECT 'GHI';
 ?column? 
----------
 ABC
 DEF
 GHI
(3 rows)

ちなみにとても重いので多用しない方がいい。

※"UNIONはダメだ!UNION ALLをつかえ!"と天の声が聞こえたので書き換えました。
※PostgreSQLでEXPLAIN ANALYZEするとUNION ALLのほうがSORTが発生しないため速いです。

複数のカラムにLIKEや正規表現比較をかける

次のようなテーブルがあって、全てのカラムから一致する内容を探すとする。

db=# SELECT * FROM employees ;
 firstname | lastname |     company      | division |   title    
-----------+----------+------------------+----------+------------
 黄川田    | 光国     | ナニガシ株式会社 | 開発部   | 主任
 山田      | 太郎     | ダメ商事         | 営業部   | マネージャ
(2 rows)

カラムをくっつけてから検索!MySQLだとconcat()使えばOK。

db=# SELECT * FROM employees WHERE firstname||lastname||company||divisi on||title LIKE '%主任%';
 firstname | lastname |     company      | division | title 
-----------+----------+------------------+----------+-------
 黄川田    | 光国     | ナニガシ株式会社 | 開発部   | 主任
(1 row)
db=# SELECT * FROM employees WHERE firstname||lastname||company||division||title LIKE '%部%';
 firstname | lastname  |     company      | division |   title    
-----------+----------+------------------+----------+------------
 黄川田    | 光国     | ナニガシ株式会社 | 開発部   | 主任
 山田      | 太郎     | ダメ商事         | 営業部   | マネージャ
(2 rows)

初めて知ったときは目から鱗!でした。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-03-10 (火) 21:34:54 (2998d)