
No.5ベストアンサー
- 回答日時:
No.2・No.4です。
> 少し勉強のお付き合いをしていただいて良いでしょうか?
はい。
ではまず、前回作成して戴いたクエリを、それぞれ以下のように変更して下さい。
(SQL文はそれぞれ全文のコピー&ペースト(上書き)でOKです);
※「テーブル1→テーブル2」型 ; クエリ名=クエリA
SELECT DISTINCT テーブル1.データ1, "テーブル1" AS 由来
FROM テーブル1 LEFT JOIN テーブル2 ON テーブル1.データ1 = テーブル2.データ2
WHERE (((テーブル2.データ2) Is Null))
ORDER BY テーブル1.データ1;
※「テーブル1←テーブル2」型 ; クエリ名=クエリB
SELECT DISTINCT テーブル2.データ2, "テーブル2" AS 由来
FROM テーブル1 RIGHT JOIN テーブル2 ON テーブル1.データ1 = テーブル2.データ2
WHERE (((テーブル1.データ1) Is Null))
ORDER BY テーブル2.データ2;
<変更の概略と理由の説明>
・(1行目) Distinct
→重複分を非表示(なくても可)
・(1行目) "テーブル○" As 由来
→各データがどのテーブルにあったかがわかるようにするために追加
(不要なら『SELECT DISTINCT テーブル○.データ○』に変更して下さい)
・(4行目) 非表示列での並べ替え指定を解除
→「表示」のチェックと同様、全て「Null」なので不要
(重複分を非表示にしようとした場合には、エラーの原因にもなります)
・・・以上で準備は終わりです。
「AとBどちらかだけ」のデータを1つにまとめて表示するためのSQL文は、以下のように
なります;
Select クエリA.データ1 As 表示列,クエリA.由来 From クエリA
UNION
Select クエリB.データ2 As 表示列,クエリB.由来 From クエリB;
*このタイプのクエリ(ユニオンクエリといいます)は、デザインビューへの切替はできません。
「As 表示列」というのは、データ1・データ2を同一列として表示する際の名前の指定
です(指定しなくても同一列に扱われる場合もありますが、フィールド名が異なる場合は
こうして宣言してやった方が無難)。
*クエリA・Bで「由来」を削除した場合、こちらの「,クエリ○.由来」も削除して下さい。
ちなみに上の文だと、元のテーブルやクエリの重複データは非表示(=1データに集約)です。
もし、重複分をそのまま表示したい場合は、元のクエリ(今回の例ではクエリA・クエリB)
の「DISTINCT(固有の値=はい)」の指定を解除した上で、
Select クエリA.データ1 As 表示列,クエリA.由来 From クエリA
UNION All
Select クエリB.データ2 As 表示列,クエリB.由来 From クエリB;
と、「Union」の後に「All」を追加すればOKです。
(どんなときに必要になるのかは私もわかっていないんですが・・・一応、参考までに)
どうもありがとうございます!
とても丁寧にわかりやすくご教授下さり、大変勉強になりました。
SQL文は正直良くわからないのですが、ACCESSでこんなことまで出来るとは思いませんでした。
ACCESSはほとんどEXCELの延長上でしか使ったことがなかったので。
長々とお付き合い下さり、感謝しております。
また疑問があったときは、ぜひ、お力をお借り願えたらうれしく思います。
この度は、どうも、ありがとうございました。m(_"_)m
No.4
- 回答日時:
No.2です。
> 重複データは1つだけ表示されるように抽出したい
重複データというのが「出力フィールド全てが同じデータ」のことでしたら、
そのクエリのプロパティシートで「固有の値」を「はい」に設定するのが
一番簡単だと思います。
設定方法は以下の通りです;
1)クエリをデザインビューで開く
2)テーブル表示領域をダブルクリックして「クエリプロパティ」シートを開く
(メニューからでも表示できますが、手元にAccess97しかなく、メニューの
並びはバージョンによって異なった気がしますので、省略させて戴きます)
3)「固有の値」を「はい」に設定
私の方への補足への回答は以上です。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
さて、前回に続いての横レスでYeti21さんには重ね重ね失礼をして申し訳ありませんが、
> 両方に存在しない(片方にしか存在しない)データを抽出
についても説明させて戴きます。
(但し、以下はあくまで「結合線で連結された1フィールドにおいて、データが一方にしか
ないもの」を表示させるクエリについての説明です。もし、お望みのクエリが「複数の
フィールドの全てが合致しないもの(一部は合致しても可)」を表示させるものだと、
この方法ではできませんので、念のため・・・)
1)クエリをデザインビューで開く
2)フィールドを結合している線を右クリックし、表示されたメニューから
「結合プロパティ」をクリック
(この選択肢がない場合は、マウスカーソルの位置がずれている可能性あり)
3)「'○○'の全レコードと'△△'の同じ結合フィールドの・・・」と表示されている
ところのオプションボタンを選択し、「OK」をクリック
4)結合線が「―」から「→」または「←」に変わるので、「その矢印の先側」のフィールド
(まだ出力対象に追加されていない場合は追加する必要あり)に対して、画面下側の
「抽出条件」欄に「Null」と入力
(なお、そのフィールドの「表示」チェックは外しておきます;
表示させても空欄(Null)になるだけなので)
*「矢印の先側」;「A→B」であればB側のこと、です。
以上で、「A→B」の形であれば「矢印の元側」の「A」側だけにあるデータが、
「A←B」であれば「B」側だけにあるデータが表示されるクエリになります。
・・・さて、上のようにすると、「Aだけにあるデータ」「Bだけにあるデータ」が
表示されるクエリが別々にできるわけですが、ここからさらに「AまたはBの
どちらかだけにあるデータ」を表示させるクエリも作ることができます。
但し、そのクエリは「デザインビュー」では組むことができませんので、
「SQLビュー」という画面で、SQL文というものを扱う必要があります。
(どんなものかを見るには、クエリを開いた後、メニューで「表示(V)→SQL
ビュー」を選択して下さい)
上で前置きした通り、お望みのクエリが「ある1フィールドで、一方にしかない
データ」を抽出するものでいいのかどうかがわかっていない状況ですので、
とりあえず今回はここまでの説明とさせていただきます。
上記の形で問題なく、また1つのクエリにまとめて表示させたいということ
でしたら、改めて説明致します。
(なお、その際は作成されたクエリのSQL文を貼り付けて戴ければ、多分
私の方でクエリを1つにまとめることもできると思います;
というか、そうして戴いた方が説明(?)が楽というのが正確なんですが)
・・・長文、失礼致しました。
この回答への補足
ありがとうございます。
大変ご丁寧なご説明をいただき感謝しています(>_<)
望んでいることが実現することができました。
>「ある1フィールドで、一方にしかないデータ」を
> 抽出するものでいいのかどうかがわかっていない状況ですので…
はい、取りあえず望んでいることは一方にしかないデータでOKでした。
もし、ご面倒でなければ、少し勉強のお付き合いをしていただいて良いでしょうか?
・「AまたはBのどちらかだけにあるデータ」を表示させるクエリ
・1つのクエリにまとめて表示
というのが気になりますので。
以下、今回、ご教授いただいて作成したクエリのSQL文を書き込んでおきますので、お時間ございましたら、ご指導下さいませ。
m(_"_)m
<今回のACCESSテーブル構成>
テーブル1:フィールド名“データ1”
テーブル2:フィールド名“データ2”
<ANo.2で教わったクエリのSQL文>
SELECT テーブル1.データ1, テーブル2.データ2
FROM テーブル1 INNER JOIN テーブル2 ON テーブル1.データ1 = テーブル2.データ2
ORDER BY テーブル1.データ1, テーブル2.データ2;
<ANo.4で教わったクエリのSQL文>
※重複データ非表示
SELECT DISTINCT テーブル1.データ1, テーブル2.データ2
FROM テーブル1 INNER JOIN テーブル2 ON テーブル1.データ1 = テーブル2.データ2
ORDER BY テーブル1.データ1, テーブル2.データ2;
※テーブル1:データ1 → テーブル2:データ2
SELECT テーブル1.データ1
FROM テーブル1 LEFT JOIN テーブル2 ON テーブル1.データ1 = テーブル2.データ2
WHERE (((テーブル2.データ2) Is Null))
ORDER BY テーブル1.データ1, テーブル2.データ2;
※テーブル1:データ1 ← テーブル2:データ2
SELECT テーブル2.データ2
FROM テーブル1 RIGHT JOIN テーブル2 ON テーブル1.データ1 = テーブル2.データ2
WHERE (((テーブル1.データ1) Is Null))
ORDER BY テーブル2.データ2, テーブル1.データ1;
No.3
- 回答日時:
フォローありがとうございます。
No.2さんが書かれたとおりです。
No.1で
>2つのテーブルから必要な項目を含むクエリを作成して
の「必要な項目を含む」というのがそういう意味です。
この回答への補足
ありがとうございます!
できました。
ところで逆のパターン、両方のフィールドを照合して、両方に存在しない(片方にしか存在しない)データを抽出する場合、どのように指定すればよろしいでしょうか?
重ね重ねで、すいませんが、よろしくお願い致します。
No.2
- 回答日時:
横レス失礼致します。
> 何か他に指定する必要があるでしょうか?
デザインビューで追加したテーブルには、そのテーブルのフィールド(列)名が表示されていると
思いますので、それをすぐ下の領域にドラッグ&ドロップして下さい。
そのフィールドが出力フィールドになります。
ちなみに、各テーブルの一番上にある「*」をドラッグ&ドロップしてやると、全てのフィールドを
一括で出力対象にできます。
この回答への補足
ありがとうございました!
できたようです。
ところで、抽出されたデータにかなり重複データ(同じ値のデータ)が存在します。
重複データは1つだけ表示されるように抽出したいのですが、
どのように、抽出条件?に指定するれば良いでしょうか?
何度もすいません。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessテキストボックス内に2つのフィールドの値を比較して大きい方の値を表示させる方法 1 2022/09/09 10:50
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Access(アクセス) Accessクエリで年月フィールドを年のみで抽出する方法について 2 2022/08/29 18:10
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
このQ&Aを見た人はこんなQ&Aも見ています
-
ACCESS テーブルを見比べて、一致したレコードを抽出したいです
Access(アクセス)
-
Access]2つのテーブルを比較してフィールドの一部が一致したデータを抽出
Access(アクセス)
-
Access 最後のレコードに到達するまでループ処理を行う方法
Access(アクセス)
-
-
4
ACCESS テーブルを見比べて、一致しないレコードを追加したいです
Access(アクセス)
-
5
Access 複数フィールドの一致
その他(Microsoft Office)
-
6
ACCESS クエリの抽出条件に他のテーブルの値を参照する方法
Access(アクセス)
-
7
ACCESS クエリで重複データを最新の1件だけ表示
Access(アクセス)
-
8
テキストボックスにクエリ結果を表示させたい
その他(データベース)
-
9
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
10
前のレコードの値を自動で入れたい
PowerPoint(パワーポイント)
-
11
アクセスのフィールド表示を2段にする方法・抽出の方法
Access(アクセス)
-
12
ACCESS2000 クエリをテーブル化するマクロ(VBA)おしえてください
Word(ワード)
-
13
Accessのテーブルデータを一気にVBAで追加したい・・
その他(データベース)
-
14
2つのテーブルに共通するレコードを削除したい
Access(アクセス)
-
15
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
16
ACCESS 複数テーブル・複数フィールドを参照する不一致クエリ
Access(アクセス)
-
17
Accessクエリ 複数フィールドを対象に空白の場合は全件表示したい
Access(アクセス)
-
18
クエリのデータをテーブルに入れたい
Access(アクセス)
-
19
年月日を持つテーブルから年月を指定して抽出したいのですが
その他(データベース)
-
20
ACCESS クエリの抽出条件で全てを抽出したい
PowerPoint(パワーポイント)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS クエリで重複データを最...
-
「データベースまたはオブジェ...
-
マイクロソフトAccessでsqlのas...
-
access・カウント結果がゼロで...
-
ACCESSクエリの任意のレコード...
-
ACCESS クエリで、グループ化...
-
access:連続データ入力
-
Accessの入力フォームから、テ...
-
Accessでのエラー
-
Access 別フォームへの再クエ...
-
Accessでフォームへのフィール...
-
Access:サブフォームにクエリ...
-
Access 複数フィールドの一致
-
アクセスのフォームのビューが...
-
アクセスでテーブルの変更内容...
-
アクセスでの項目追加について...
-
選択したチェックボックスのみ...
-
Accessのクエリによる集計が出...
-
他フォームのチェックボックス...
-
Accessのフォームで作業領域を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESS クエリで重複データを最...
-
ACCESSでクエリを作成したら「...
-
ACCESS クエリで、グループ化...
-
「データベースまたはオブジェ...
-
ACCESSにてフィールド間の最小...
-
アクセスでフォームが更新でき...
-
access・カウント結果がゼロで...
-
ACCESS クエリー 抽出条件が...
-
SqlServer2012 ビューとクエリ
-
ACCESS のクエリー実行に異常に...
-
クエリで「データ型が一致しま...
-
access:連続データ入力
-
追加先の発見方法(SQL以外)
-
ACCESSで2つのテーブル比較で...
-
SQLで優先順位が高いレコードを...
-
選択クエリで偶数月しか表示し...
-
AccessでのDISTINCTROW 、DISTI...
-
長いSQL文を見やすくするツ...
-
Accessで「クエリーが複雑すぎ...
-
Access200のFilterとFindの違い
おすすめ情報