Libre Office Baseで使えるSQL 〜UNIONで複数の同じようなテーブルを全部表示〜

2022年9月19日

今日はLibre Office Baseで同じような項目のテーブルが複数ある場合、同じ項目を抽出して同時に縦に表示させるSQLUNION ALLについて説明します。

同じようなテーブル?

データベースソフトの設計の仕方は色々あるので、最終的に同じゴールであっても必ずしもUNIONが必要なわけではないと思いますが、今日は同じような項目のテーブルが複数あるケースについてお話しします。

無料で配布させていただいているシンプル帳簿を見てみましょう。

左に赤い点がついているのが、同じようなテーブルです。試しに現金と預金のテーブルを開けてみると

日付、摘要、相手科目、入金額、出金額>>>>>>

実は微妙に違うのですが基本的に載せたい情報は同じなので、同じ項目があります。他の二つのテーブルも同じです。

ということは同じようなテーブルが4つあるわけです。

UNION ALLが活かせる場面

では、ここから仕訳帳を作るとします。仕訳帳はすべての取引を日付順に並べたものです。詳しく知りたい方は→(https://daifukukomoney.com/post-176/

つまり先ほどの

・現金出納帳T

・普通預金出納帳T

・事業クレジットカードT

・個人クレジットカード出納帳T

※名前の付け方はテキトーなので気にしないでください。

の4つのテーブルを縦に並べて必要な項目を抽出しなければなりません。こんな感じです。

このクエリーには4つのテーブルの同じ項目のものが縦に、しかも日付順に並んでいます。

やってみるとわかると思いますが、クエリーで4つのテーブルから項目を抽出しても縦には並びません。この作業をUNION ALLが担ってくれます。

SQL編集で書く

残念なことにUNIONはデザイン表示でできないので、SQL編集でやることになります。先ほどの仕訳帳のSQLを見てみましょう。

SQL表示で編集から編集

全部治らなかったので、下の方を写しています。すみませんCASE WHENのややこしいのが入ってますけど無視してください。

見欲しいのはUNION ALL 前後のところで、

上には

SECECT “日付","摘要",〜〜〜〜〜〜〜

と抽出したい項目が並んで

FROM“現金出納帳T"

UNION ALL以下は

同じように

ECECT “日付","摘要",〜〜〜〜〜〜〜

ときて、

FROM“事業クレジットカードT"

そして最後に

ORDER BY“日付"

と締めくくっています。

つまり、違うテーブルから同じ項目を抽出して日付順に並べたいのがわかりますね。

SQL

改めてSQLを書き起こしますので、必要な方はコピペしてみてください。

SELECT “日付", “摘要",”●”,
FROM “●●テーブル" 
  
UNION ALL

SELECT “日付", “摘要",”●”,
FROM “▲▲テーブル" 

UNION ALLの注意点、抽出する項目数は同じにする

重要なポイントとして、抽出する項目数は同じにしましょう。でないとエラーになります。

UNION ALLの注意点、SQLコマンドは直接

クエリー編集が面の上の方にSQLと書いてある部分があります。

これをクリックしてオンの状態にしないと走りませんのでご注意ください。

まとめ

いかがでしたか?今回は同じよウナ複数のテーブルから同じような項目を抽出して縦に並べるUNION ALLについての説明でした。

私が作成した帳簿にも多用しているので(笑)ご興味のある方はSQLを覗いてみてください。