ACCESS 2003を使用しています。
テーブルA
テーブルB
テーブルC
の3テーブルでクエリを作っています。結合的には・・・
テーブルAのフィールドX⇔テーブルCのフィールドX
テーブルBのフィールドX⇔テーブルCのフィールドX
です。
これで3テーブルに共通する一致データのみ抽出はできるのですが、
3テーブルに共通する一致データに加えて、テーブルAとテーブルBの不一致データ(テーブルCに対する)も一緒に抽出できるようにしたいのです。
2テーブルだけの結合であれば、結合プロパティを、
テーブルAのフィールドX⇒テーブルCのフィールドX
のようにすることで実現できるのですが、3テーブルの結合の場合、どのようにすればよいでしょうか?
テーブルAのフィールドX⇒テーブルCのフィールドX
テーブルBのフィールドX⇒テーブルCのフィールドX
のようにしてみましたが、「あいまいな外部結合が含まれているので、SQLステートメントを実行できません。云々。。。」と警告エラーがでてしまいます。
どなたが、ご教授いただけると助かります。
ご面倒ですが、よろしくお願い致します。
No.7ベストアンサー
- 回答日時:
>実際には、TCのフィールドデータだけでなく、TAとTBの一部のフィールドデータも表示させたかったので、
>以下のようにセレクトしたいぶんを記述すればいいわけですね?
>SELECT TA.フィールドA1, TB.フィールドB1, TC.フィールドC1, TC.フィールドC2, TC.フィールドC3・・・
>FROM テーブルA AS TA,テーブルB AS TB,テーブルC AS TC
>WHERE TC.フィールドC1 = TA.フィールドA1
> OR TC.フィールドC1 = TB.フィールドB1
正解です
No.6
- 回答日時:
#1です
> 結果、抽出データは無しでした。
う~ん?日本語的に私の方が読み取れてないのかな?
具体的な話・・・
テーブルA
フィールドA1
a
b
c
d
テーブルB
フィールドB1
b
e
f
テーブルC
フィールドC1
d
g
h
と、した場合
結果、欲しいのは?
私の想定では、
a
c
が、出てくる結果を想定していたのですけど?
この回答への補足
お手数おかけしています。
欲しいデータは、
テーブルAフィールドA1とテーブルCフィールドC1をぶつけて
一致するデータおよび不一致するデータ
と
テーブルBフィールドB1とテーブルCフィールドC1をぶつけて
一致するデータおよび不一致するデータ
です。
これらを一回のクエリ実行で実現させたいわけです。
一致したデータはフィールドに存在し、不一致でデータが存在しないフィールドは空白になっている状態で、クエリ結果として出したいのです。
テーブルA
フィールドA1
a
b
c
d
テーブルB
フィールドB1
b
e
f
テーブルC
フィールドC1
d
g
h
と、した場合
欲しいのは結果は、以下のような感じのクエリ結果です。
テA:フィA1|テB:フィB1|テC:フィC1
a |(空) |(空)
b |b |(空)
c |(空) |(空)
d |(空) |d
(空) |e |(空)
(空) |f |(空)
(空) |(空) |g
(空) |(空) |h
No.5
- 回答日時:
No3 です。
実は、以下の書き方なのですが、
SELECT テーブルC.*
FROM テーブルA, テーブルB, テーブルC
WHERE テーブルC.フィールドC1 = テーブルA.フィールドA1
OR テーブルC.フィールドC1 = テーブルB.フィールドB1
テーブル名が長い場合は、以下のように 「テーブルA」を「TA」として略して使えます
SELECT TC.*
FROM テーブルA AS TA,テーブルB AS TB,テーブルC AS TC
WHERE TC.フィールドX = TA.フィールドX
OR TC.フィールドX = TB.フィールドX
この回答への補足
なるほど。。。始めて知りました!勉強になります。
「AS = ~であるとして」という意味で、略称に置き換えて記述できるというわけですね。
実はテーブル名が長いので、記述しているときにわけがわからなくなりそうだったんで、これは便利です。
実際には、TCのフィールドデータだけでなく、TAとTBの一部のフィールドデータも表示させたかったので、以下のようにセレクトしたいぶんを記述すればいいわけですね?
SELECT TA.フィールドA1, TB.フィールドB1, TC.フィールドC1, TC.フィールドC2, TC.フィールドC3・・・
FROM テーブルA AS TA,テーブルB AS TB,テーブルC AS TC
WHERE TC.フィールドC1 = TA.フィールドA1
OR TC.フィールドC1 = TB.フィールドB1
No.4
- 回答日時:
#1です
> テーブルAのフィールドA1
> テーブルBのフィールドB1
> テーブルCのフィールドC1
> とした場合、
> SELECT *
> FROM テーブルA
> WHERE フィールドA1 Not In (SELECT フィールドB1 FROM テーブルB)
> And フィールドA1 Not In (SELECT フィールドC1 FROM テーブルC);
相関関係は、問題ないと思いますよ
この回答への補足
ありがとうございます。そうですか・・・
それで実施してみたところ、えらく戻ってくるのに時間がかかり、結果、抽出データは無しでした。
データ的には、かならず一致するデータと不一致のデータを入れてテストしているのですが・・・
No.3
- 回答日時:
質問の内容だと、これかな?
SELECT TC.*
FROM テーブルA AS TA,テーブルB AS TB,テーブルC AS TC
WHERE TC.フィールドX = TA.フィールドX
OR TC.フィールドX = TB.フィールドX
この回答への補足
ご回答おそれいります。
そうすると・・・
SELECT テーブルC.*
FROM テーブルA AS テーブルA, テーブルB AS テーブルB, テーブルC AS テーブルC
WHERE テーブルC.フィールドC1 = テーブルA.フィールドA1
OR テーブルC.フィールドC1 = テーブルB.フィールドB1
のような記述となるのでしょうか?
No.2
- 回答日時:
#1です
すみません
Not In の後のユニオンクエリは動作しないみたい><
SELECT *
FROM テーブルA
WHERE フィールド Not In (SELECT フィールド FROM テーブルB)
And フィールド Not In (SELECT フィールド FROM テーブルC);
と、ただ「AND」で結ぶくらいしか無いみたい;;
この回答への補足
おそれいります。
それぞれのフィールドが、どのテーブルのフィールドなのかわかりませんので教えてください。
SELECT *
FROM テーブルA
WHERE フィールドA1 Not In (SELECT フィールドB1 FROM テーブルB)
And フィールドA1 Not In (SELECT フィールドC1 FROM テーブルC);
ということで、よろしいでしょうか?
No.1
- 回答日時:
サブクエリとユニオンクエリの話じゃないかな?
Select ~
From テーブルA
Where テーブルA.フィールド Not In (Select フィールド From テーブルB Union Select フィールド Form テーブルC)
基本的に「不一致」の場合、「結合」を使用しないようにした方が楽だよ
この回答への補足
SQLビューでクエリ保存をしようとしたところ、
(Select フィールド From テーブルB Union Select フィールド Form テーブルC)
の部分で、「この操作は、サブクエリでは実行できません」と言われて保存ができないようです。
テーブルAのフィールドA1
テーブルBのフィールドB1
テーブルCのフィールドC1
とした場合、
Select テーブルA.フィールドA1, テーブルB.フィールドB1, テーブルC.フィールドC1 AS テーブルC.フィールドC2 AS テーブルC.フィールドC3・・・
From テーブルA
Where テーブルA.フィールドA1 Not In (Select フィールドB1 From テーブルB Union Select フィールドC1 Form テーブルC)
という記述で、よろしいのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- その他(データベース) IT用語について質問です。 以前ITパスポートの試験を受けた際にデータベースが何の集まりかについての 2 2022/12/10 12:29
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Access(アクセス) Access クエリ 同一テーブル内 複数フィールドの同時集計のやり方について 1 2022/05/18 19:01
- Oracle SQL update方法 2 2022/06/22 14:07
- Access(アクセス) テキストボックスの値をテーブルに入力したい 2 2022/06/28 12:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでテーブルの値をテキス...
-
IT用語について質問です。 以前...
-
Accessのフィールド数が255しか...
-
ExcelのデータをコピーでACCESS...
-
Accessで別途保存の画像ファイ...
-
SQLServer2005のSQL文での別名...
-
INSERT INTO ステートメントに...
-
フォームのデータシートビュー...
-
アクセス メモ型 255文字...
-
アクセスでオートナンバーをリ...
-
Accessの最大レコード数制限
-
accessのレポートで元になるテ...
-
アクセス A列コピー B列貼り...
-
ACCESSで400以上のフィールドが...
-
AccessでYes/No参照(チェック...
-
ACCESSでテーブルのチェックを...
-
SQLで特定の文字を含むものを削除
-
ACCESSで和暦を西暦に・・・
-
ODBC--リンクテーブル'XXXX'で...
-
ACCESSでの改行コード
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでテーブルの値をテキス...
-
Accessのフィールド数が255しか...
-
ACCESSで400以上のフィールドが...
-
ACCESSでの改行コード
-
INSERT INTO ステートメントに...
-
accessのレポートで元になるテ...
-
アクセス エラーを数値「0」に...
-
ExcelのデータをコピーでACCESS...
-
Accessで、固定アルファベット+...
-
Access 昇順・降順で並び替え...
-
accessで重複を防ぎたい
-
アクセス VBAで列の入れ替...
-
SQLServer2005のSQL文での別名...
-
ACCESSで和暦を西暦に・・・
-
ACCESS2000「定義されているフ...
-
主キーはオートナンバー型のID...
-
ACCESSでオートナンバーを任意...
-
ACCESSでテーブルのフィールド...
-
アクセス A列コピー B列貼り...
-
IT用語について質問です。 以前...
おすすめ情報