trdsql CROSS JOIN
Posted on:
CROSS JOINは、総当りを簡単に作り出せる方法です。
a.csv
aa
ab
acb.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 "
| home | aware |
|---|---|
| 巨人 | DeNA |
| 巨人 | 阪神 |
| 巨人 | 広島 |
| 巨人 | 中日 |
| 巨人 | ヤクルト |
| DeNA | 巨人 |
| DeNA | 阪神 |
| DeNA | 広島 |
| DeNA | 中日 |
| DeNA | ヤクルト |
| 阪神 | 巨人 |
| 阪神 | DeNA |
| 阪神 | 広島 |
| 阪神 | 中日 |
| 阪神 | ヤクルト |
| 広島 | 巨人 |
| 広島 | DeNA |
| 広島 | 阪神 |
| 広島 | 中日 |
| 広島 | ヤクルト |
| 中日 | 巨人 |
| 中日 | DeNA |
| 中日 | 阪神 |
| 中日 | 広島 |
| 中日 | ヤクルト |
| ヤクルト | 巨人 |
| ヤクルト | DeNA |
| ヤクルト | 阪神 |
| ヤクルト | 広島 |
| ヤクルト | 中日 |