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

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

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

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

1290閲覧

from句の中で同テーブルを別のテーブルとしたい

yuu789

総合スコア14

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2020/08/29 15:06

from句の中で、テーブルに別名をつけてそれぞれ別のテーブルとして扱いたいです。ただその時、できるならテーブルを二つ結合して一つのテーブルとして扱いたいと思っています。

from A as t1 left join A as t2 on t1.コード=t2.コード

という形だとうまくいくのですが、

from (A inner join B on A.番号=B.番号) as t1 left join (A inner join B on A.番号=B.番号) as t2 on t1.コード=t2.コード

だとエラーになってしまいました。
色々試した結果、
as t1やas t2の前にカッコをつけるとエラーになってしまうと分かったのでそれが原因かもしれないと思うのですが・・

どうにかしてうまく行うことはできますでしょうか?
よろしくお願い致します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

AccessのクエリーはJoinを2つ以上重ねる場合は結合順序を明確にするために()で括る必要があります。
()の数はjoin数-1です。

SQL

1select * 2from (( 3 A as A1 4 inner join A A2 5 on A1.コード=A2.コード 6 ) inner join B as B1 7 on A1.番号=B1.番号 8 ) inner join B as B2 9 on A2.番号=B2.番号

デザインビューで作成してから、SQLビューに切り替えてみると分かります。
SQLを作る際には、デザインビューで大枠を作成し、SQLビューに切り替えた内容を元に整形するのも一つの方法です。

投稿2020/08/29 23:45

編集2020/08/30 01:53
sazi

総合スコア25206

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

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

kitasue

2020/08/30 01:00

saziさん、こんにちは。 「AccessのクエリーはJoinを2つ以上重ねる場合は結合順序を明確にするために()で括る必要があります。」 とのことですが、確かに、主となるテーブル(またはクエリ)に対してJoinを2つ以上連ねる場合は括弧を重ねていく必要があると思いますが、今回はサブクエリが2つあって、それぞれの「内部に」Joinがありますので、該当しないのではないでしょうか。
sazi

2020/08/30 01:17 編集

@kiasueさん 質問者さんはサブクエリーでとは言われていませんし、やりたいことはクエリーのデザインビューで出来る事です。 サブクエリーにすると、デザインビューでは元のテーブルが分からなくなります。 デザインビューで表現できるSQLを記述する際のポイントの説明が、回答の意図するところです。
sazi

2020/08/30 01:46 編集

SQLの括弧位置が若干違うのは、Aがトランザクション、Bがマスタみたいな事を推測して書き換えたからで、説明する分には関係ないと考えています。
kitasue

2020/08/30 04:41

saziさん。ご回答ありがとうございました。
yuu789

2020/09/01 11:32

saziさん saziさんの書いてくださったようにやってみたら、できました!!(asだけ一つ足しましたが、同じように書きました。)重くてフリーズすることなくできたので本当に感謝しています。 正直、そのような形は他で見たことあったのに自分は未熟で一人ではいくら考えてもそのような形を書くことができませんでした汗 kitasueさん 私の質問の仕方も未熟だったのですが、そこまで色々考えてくださってありがとうございます。 kitasueさんにも色々教えていただき、そのようなやり方があり技術があることを教えてもらうことができ、技術も知識も高いお二人に教えていただけて本当にありがたく、本当に感謝しています。
guest

0

SQL

1from ( 2select * from 3A inner join B on A.番号=B.番号) as t1 left join ( 4select * from 5A inner join B on A.番号=B.番号) as t2 on t1.コード=t2.コード

でいかがでしょうか。

投稿2020/08/29 20:23

kitasue

総合スコア314

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

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

yuu789

2020/08/29 22:03

そのようにしてみたらできました!ありがとうございます!!!!
kitasue

2020/08/29 23:21

よかったですね。 一度「サブクエリ」を検索してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問