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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

904閲覧

postgresql テーブルの結合、紐付について

---stax---

総合スコア148

PostgreSQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2018/12/17 07:01

表題の件で質問させてください
以下のような2つのテーブルが存在するのですが、テーブルAの列名である「column1」,「column2」, 「column3」~にあたる部分をテーブルBの「col_nam」と一致する「name」に置き換えたいと考えています(テーブルAのcolumn1→重量、column2→移動量のような形)
SQLの知識が浅く調べてみたところSELECT文を発行するときにテーブルを結合すればできるのかと思ったのですが、JOIN文では横にくっつくだけで列名を紐付ているものに置き換えるという部分が分からず悩んでいます。
参考にしたリンク
そもそもSQLで実現可能かどうかも分からないのですが、どのような手段、考え方で進めればよいでしょうか?
初歩的な質問で申し訳ありませんがアドバイス頂けたら嬉しいです。
宜しくお願い致します。

テーブルA
テーブルA
テーブルB
テーブルB

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

select 結果のカラム名はエイリアスによって変更できますが、別テーブルの内容によってという事なら動的にSQLを生成するしかありません。

ですが、画面などの表示の際にタイトル情報が必要な時だけデータとは別に取得するようにした方が良いかと思います。

投稿2018/12/17 07:16

編集2018/12/17 09:43
sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

---stax---

2018/12/17 09:32

回答ありがとうございます。 記載が漏れておりましたが最終的には列名の置き換えが出来たテーブルをCSV形式で出力したかったです。 回答者様の意図と違って理解しているとは思いますが、データは別に取得した方が良いという回答から2つのテーブルを取得するSQLを発行し、その結果をプログラムで編集し列名を置き換え1つのテーブルとしました。 回答頂いた「動的にSQLを発行する」という部分は自分には分からなかったのでそちらも勉強してみます。 ありがとうございました。
sazi

2018/12/17 09:47

動的SQLとは、SQLを文字列として編集して生成する事です。
guest

0

以下自己回答
SQL文だけで実装する方法は見つけられず。
2つのテーブルをプログラム上で処理して所望の動作を満たす。

python

1from datetime import datetime, timezone, timedelta 2import numpy as np 3import psycopg2 4import pandas as pd 5 6# 接続情報 7connection_config = { 8'host': 'localhost', 9'port': '5432', 10'database': 'postgres', 11'user': 'postgres', 12'password': 'postgres' 13} 14 15# 接続 16connection = psycopg2.connect(**connection_config) 17 18# DataFrameでロード 19data = pd.read_sql(sql="SELECT * FROM test.view_value;", con=connection) # 対象ビュー 20data2 = pd.read_sql(sql="SELECT * FROM test.detail;", con=connection) # 日本語列名取得 21 22# Series化 23detail_cname = data2.detail_cname 24name = data2.detail_name 25 26# 列番号と日本語列名を辞書化 27dic = {} 28for cname, jname in zip(detail_cname, name): 29 dic[cname] = jname 30 31# 列名変更 32data = data.rename(columns=dic) 33 34# aware -> nativeなdatetime型に変換 35def toNative(row): 36 if not pd.isnull(row['date']): 37 row['date'] = row['date'].replace(tzinfo=None) 38 39 if not pd.isnull(row['input_date']): 40 row['input_date'] = row['input_date'].replace(tzinfo=None) 41 42 return row 43 44 45 46 47data = data.apply(toNative,axis=1) 48 49data.to_csv(r'C:\Users\Desktop\test.csv', encoding='utf-8-sig') 50

投稿2018/12/17 09:37

---stax---

総合スコア148

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問