trdsql CROSS JOIN

Posted on:

CROSS JOINは、総当りを簡単に作り出せる方法です。

a.csv

aa
ab
ac

b.csv

ba
bb
bc

の2つのCSVをCROSS JOINすると 3×3で全ての組み合わせを出力できます。

$ trdsql "SELECT * FROM a.csv CROSS JOIN b.csv"
aa,ba
aa,bb
aa,bc
ab,ba
ab,bb
ab,bc
ac,ba
ac,bb
ac,bc

また一つのファイルに対して自己結合をすることもできます。 例えば、ホーム&アウェーの総当り表を作成してみます。

cleague.csv

team
巨人
DeNA
阪神
広島
中日
ヤクルト

単純にCROSS JOINするには以下のようになります(JOIN条件は無いので書けません)。

$ trdsql -ih \
"SELECT h.team,a.team "\
"  FROM cleague.csv AS h "\
" CROSS JOIN cleague.csv AS a"

自分のチームとは対戦出来ないので、同じチームのときをWHERE h.team != a.teamにより除外します。

$ trdsql -ih -omd \
"SELECT h.team AS home,a.team AS aware " \
"  FROM cleague.csv AS h CROSS JOIN cleague.csv AS a "\
" WHERE h.team != a.team "
homeaware
巨人DeNA
巨人阪神
巨人広島
巨人中日
巨人ヤクルト
DeNA巨人
DeNA阪神
DeNA広島
DeNA中日
DeNAヤクルト
阪神巨人
阪神DeNA
阪神広島
阪神中日
阪神ヤクルト
広島巨人
広島DeNA
広島阪神
広島中日
広島ヤクルト
中日巨人
中日DeNA
中日阪神
中日広島
中日ヤクルト
ヤクルト巨人
ヤクルトDeNA
ヤクルト阪神
ヤクルト広島
ヤクルト中日