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

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

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

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Q&A

解決済

3回答

5154閲覧

SQL SERVER 2000 で 条件により別テーブルへのJOIN

Shimo

総合スコア12

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

0グッド

1クリップ

投稿2015/12/22 08:17

ASP(classic)で表示する為に、
SQL SERVER 2000 にて、テーブルを結合したいのですが、
条件により結合するテーブルを選択したいと考えています。

select * from (
select * from TABLE1 ) as A
left outer join (
select * from TABLE2 ) as B
ON A.data1 = B.data1


select * from (
select * from TABLE1 ) as A
left outer join (
select * from TABLE3 ) as C
ON A.data1 = C.data1


TABLE2 と TABLE3 の連結を条件付けしたいと考えています。

select * from (
select * from TABLE1 ) as A
left outer join (

条件①なら
select * from TABLE2 ) as B
ON A.data1 = B.data1

条件②なら
select * from TABLE3 ) as C
ON A.data1 = C.data1


上記のような型にしたいと思いますが、何かいい方法はありますでしょうか?

尚、全てJOINするにはキーとなる項目が少ない上にデータの量が膨大で非常に時間がかかる為、連結対象を絞りたいです。

これはASP(classic)で条件指定する方が良いのかもしれませんが、SQLのみでこの構成を作ってほしいとの事です。

ご存知の型、どうぞよろしくお願いします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

こんな感じでどうでしょう?

結合条件に条件①、条件②を含めてUNION ALL
条件の成立しない方はJOINしないので結果には出てこなくなります。

SQL

1select * 2from (select * from TABLE1) as A 3left outer join (select * from TABLE2) as B 4ON A.data1 = B.data1 5AND 条件①成立 6UNION ALL 7select * 8from (select * from TABLE1) as A 9left outer join (select * from TABLE3 ) as C 10ON A.data1 = C.data1 11AND 条件②成立 12

投稿2015/12/22 08:56

kutsulog

総合スコア985

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

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

Shimo

2015/12/22 12:03

お返事ありがとうございます。 まさに理想的な構成で表示する事ができました。 結果的に余分に表示されない為、スピードもある程度確保でき、さらにJOINと異なり表示が縦に並ぶので見た目や後々の加工もやりやすかったです。 UNIONの使い方自体を全然把握していなかったこともあり、今後に友好的に使えそうです。 ありがとうございました。
guest

0

実行計画見てみないとなんともですが、対象を絞り込んだビューを作成しておいてJoinするとどうでしょう?
条件1とか条件2とか言われてもわからないので、答えになっていないかもしれませんが..

投稿2015/12/22 08:41

dojikko

総合スコア3939

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

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

Shimo

2015/12/22 11:58

曖昧な質問で申し訳ありません。 Joinは試していたのですが、あまりにヒット数が多くかつ絞りが効かない為、 Joinでは厳しかったのです。 (そもそもテーブルに問題を感じるほどに絞れなかったんです) お返事ありがとうございます。
guest

0

こんな感じ↓
select
条件①なら
B.x
条件②なら
C.x
from TABLE1 as A
left outer join TABLE2 as B ON A.data1 = B.data1
left outer join TABLE3 as C ON A.data1 = C.data1

投稿2015/12/22 08:36

YiLi

総合スコア96

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

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

Shimo

2015/12/22 12:01

お返事ありがとうございます。 全てのテーブルをJOINしてそこから絞る手段は試してみたのですが、テーブルの項目数の問題もあり、絞りがほとんど聞かない上に全てJOINした場合のヒット数が膨大だった為、 同様の方法で難しいところがありました。 ただ、JOINの繋ぎ方についてシンプルな方法がある事がわかり、勉強になりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問