trdsql ファイルとテーブルのJOIN

Posted on:

既にテーブルが存在するデータベースに接続することにより、ファイルとテーブルをJOINすることもできます。

例えば、データベース内にfruitsというテーブルがあった場合に、前回のabc.csvとJOINできます。

$ trdsql -driver postgres -dsn "dbname=trdsql_test" \
     "SELECT a.c1, a.c2, f.name FROM abc.csv AS a "\
  "LEFT JOIN fruits AS f ON (CAST(a.c1 AS int) = f.id)"
1,AAA,Orange
2,BBB,Melon
3,CCC,Apple

例えば、データベース上にusersテーブルがあり、抽出したいリストがCSVファイルであった場合に、リストをWHERE user IN (...)で並べる等を検討するところですが、trdsqlではダイレクトにJOINして抽出できます。

list.csv

tarou
jirou
noborus

usersテーブル

id,name
1,taizou
2,momo
3,tarou
$ trdsql -driver postgres -dsn "dbname=trdsql_test" \
     "SELECT u.id, u.name FROM users AS u "\
 "INNER JOIN list.csv AS l ON (u.name = l.c1)"
3,tarou

逆にCSVファイルにデータベースのテーブルから情報を足すといったことも考えられます。

$ trdsql -driver postgres -dsn "dbname=trdsql_test" \
     "SELECT u.id, u.name FROM list.csv AS l "\
  "LEFT JOIN users AS u ON (l.c1 = u.name)" \
       "ORDER BY u.id"
3,tarou
52,jirou
98,noborus