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

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

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

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

Treasure Data

Treasure Dataは、米国トレジャーデータ社の提供するクラウド型のデータマネジメントサービスです。ビッグデータ処理システムを備え、AWS上にセットアップされているため、データの集収、保管、分析を容易に行うことができます。

Q&A

解決済

3回答

9345閲覧

複数条件指定におけるJOIN

tynko

総合スコア18

SQL

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

Treasure Data

Treasure Dataは、米国トレジャーデータ社の提供するクラウド型のデータマネジメントサービスです。ビッグデータ処理システムを備え、AWS上にセットアップされているため、データの集収、保管、分析を容易に行うことができます。

0グッド

0クリップ

投稿2018/09/18 02:36

お世話になります。

画像のようなテーブルが2つあった場合にテーブルを統合したく思うのですが、
キーが片方のテーブルに置いて複数列に分かれてしまっております。
その場合、どのような処理をすれば、一回の構文でジョインできるのでしょうか。

下記のようなコードがいいのかと思い実施したものの上手くいきません。

SQL

1select ID,generation,gender,erea 2from 3Table A as A 4LEFT JOIN 5Table B as B 6ON A.ID = B.U-ID 7AND 8ON A.ID = B.A-ID

イメージ説明
基本的な質問で恐縮ですが、どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

or条件で結合すれば良いかと思います。

SQL

1select ID,generation,gender,erea 2from 3Table A as A 4LEFT JOIN 5Table B as B 6ON A.ID in (B.U-ID, B.A-ID)

投稿2018/09/18 02:43

sazi

総合スコア25138

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

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

tynko

2018/09/18 11:49

いつもありがとうございます。 クエリを投げているのですが、数時間結果が返ってきません。。。何か他の方法などございませんでしょうか?
sazi

2018/09/18 12:15

tableAとtableBはそれぞれ何件あるのでしょうか? u-idのみで結合するとどの位の時間でレスポンスはありますか? 現状のインデックスはどのようなものですか? 少なくとも以下のインデックスは必要だと思われます。 tableA(ID) tableb(U-ID,A-ID) ※件数の多い方を先頭
sazi

2018/09/18 12:20

投入しているSQLは、質問以外に結合するテーブルが別にあったり、where条件やorder byの指定は無い状況ですか?
tynko

2018/09/18 12:51

それぞれ、数千万レコードでございます。 u-idのみの結合ですと数分で処理が終わりました。 where条件、order by などはございません。 少し時間がかかりすぎていたので、U-IDとA-IDに識別子をふるカラムを作り、識別子で絞り込み、テーブルを別々に作成し、unionでひっつけ、なんとか解決いたしました。 色々とお手数おかけしました。
guest

0

U-IDとA-IDは必ず排他的に片方に値があるときはもう片方がNULLなのでしょうか?
そのあたりの前提がないとデータが競合する可能性があります
上記条件があるならCONCATしてやればいいだけかもしれません

投稿2018/09/18 06:27

yambejp

総合スコア114572

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

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

sazi

2018/09/18 07:43

私の回答では、似たような事でcoalesce()も考えましたが、インデックスを使用される可能性が高い、inを使用しました。
guest

0

inner joinを使うと情報が存在しない列は潰せたはずなので、
Table Bを2回結合すればご希望のようになりそうには思います。

sql

1 2select ID,generation,gender,erea 3from 4TableA as A 5inner JOIN 6TableB as B1 7ON A.ID = B1.U-ID 8inner JOIN 9TableB as B2 10ON A.ID = B2.A-ID

投稿2018/09/18 02:43

m.ts10806

総合スコア80765

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

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

tynko

2018/09/18 11:50

select の句で、ID, 下記をB1なのかB2なのか指定しないといけず、処理ができませんでした。 generation,gender,erea 何か代替案などございますでしょうか?
m.ts10806

2018/09/18 12:24

あ、確かにそうですね join だから列が増えるから… どっちかにしかデータがないならcaseを使ってnullじゃないほうを採用するのはいかがでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問