質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

受付中

postgreSQLでの複数テーブルを使用したselect文について

python_k
python_k

総合スコア7

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

1回答

0評価

0クリップ

142閲覧

投稿2022/05/06 04:29

編集2022/05/09 09:56

PostgreSQLの複数テーブルを使用したselct文について質問です。

table1
col1 | col2 | col3
A1 | B1 | test1
A2 | B2 | test2
A3 | B3 | test3

table2
id | A1 | A2 | A3 |date
1 | true |false|false | 2022-05-04
2 | false|true |true | 2022-05-05

table3
id | B1 | B2 | B3 | date
1 | 200 |300 |350 | 2022-05-04
2 | 100 |250 |400 | 2022-05-05

テーブルの定義は、
table1
col1 varchar(20)
col2 varchar(20)
col3 varchar(20)

table2
id int
B1 int
B2 int
B3 int
date date

table3
id int
B1 int
B2 int
B3 int
date date
となります。

selectで上記のtable1のcol1と一致するカラム名をtable2で見てtrueの場合のみ、table3からtable1のcol2と一致するカラム名の数値を以下のように表示したいです。

value | col3 | date
200 | test1 | 2022-05-04
250 | test2 | 2022-05-05
400 | test3 | 2022-05-05

ストアドやビューというものは調べてみたのですが、カラム名やテーブル名を変数で指定しようとするとうまくいきませんでした。
selectでこういった表示は可能なのでしょうか?

dateはtable2とtable3で同じ数値が入るのでtable2の方でお願いします。
またtable2,table3は今後カラム数が増える可能性があり、その際はtable1側にもデータが追加されます。
そのため可能であればA1,A2等を固定で指定するのではなく、table1のデータをそのままを使用したいです。
ストアド、ビューは現在削除してしまったため、以前のものが再現でき次第追記したいと思います。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

takanaweb5

2022/05/06 06:21

結果のdate列はtable2とtable3のいずれの値を取得するのでしょうか?
m.ts10806

2022/05/06 06:30

>うまくいきませんでした。 実際のコードと起きている問題を記載されたほうが良いと思います。 あと、テーブル定義も提示してください。
sazi

2022/05/07 02:29

> table1のcol1と一致するカラム名をtable2で見てtrueの場合のみ 例でみると、table2は日付毎でtrue/falseが存在するようですが「trueの場合のみ」という条件をもう少し詳しく。
sazi

2022/05/07 02:32

> そのため可能であればA1,A2等を固定で指定するのではなく table2やtable3はカラム名なので、それも固定では無いという事ですか? 正規化を緩めすぎなので、動的SQLでしか対応できないと思います。
python_k

2022/05/09 00:56

table2は日付毎にtrueかfalseが付きます。 日付毎に各カラムがtrueかどうかを判断してtrueだったカラムのものを表示したいと考えています。 そのためtable2のA1がtrueの場合下記のように表示したいです。 value | col3 | date 200 | test1 | 2022-05-04 100 | test1 | 2022-05-05 250 | test2 | 2022-05-05 400 | test3 | 2022-05-05 table2、table3は今後カラムが増える可能性があるため、可能であれば固定で指定しない方法があればと考えています。 よろしくお願いします。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。