- ベストアンサー
Access初心者のための簡易なクエリの実行方法
- Access初心者のための簡易なクエリの実行方法をご紹介します。aaa.tblとbbb.tblで一致したjanで、一番小さいaaa.tblのidデータにbbb.tblのpsを設定する方法を解説します。
- 重複クエリを使用したりすることなく、一番小さいaaa.tblのidデータを特定する方法を教えます。Windows XP Proでの操作方法も紹介します。
- また、この操作に関連するテーブルの構造とデータも一部抜粋して掲載しました。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
重複クエリの実行で、一番小さいID取得で困っていますか。 重複クエリを使うよりは選択クエリの集計を使うと求めることができます。 クエリの結果を保持しておいて、他のクエリと連結させることの繰り返しです。 前回答者の考えと同じです。 SQL記載では不十分かと思いますので補足します。 手順1 aaa.tblを元に選択クエリ、 同じjanであるものでグループ化、IDは最小値を、にする。 この選択クエリで、 どのIDにPSを付与したら良いかレコードが特定できます。 001 1111111111 004 2222222222 005 3333333333 007 4444444444 008 5555555555 手順2 この選択クエリの結果を元にテーブル作成クエリを実行し結果を残しておきます。→ccc.tbl 手順3 ccc.tblを元に選択クエリ、 bbb.tblと「jan」で結合させます。 ccc.tblに存在するレコード全件全項目出力、bbb.tblの「ps」も出力します。 001 1111111111 02 004 2222222222 06 005 3333333333 01 007 4444444444 05 008 5555555555 02 手順4 この選択クエリの結果を元にテーブル作成クエリを実行し結果を残しておきます。→ddd.tbl 手順5 aaa.tblを元に選択クエリ、 ddd.tblと「jan」で結合させます。 aaa.tblに存在するレコード全件全項目出力、ddd.tblの「ps」も出力します。 ※ 手順1の選択クエリの結果を元に手順3の選択クエリ実行、手順5の選択クエリ実行、でも構いません。 テーブルを作るのは途中の結果を保持、確認するためです。 最初の段階は結果を残す方が確実です。
その他の回答 (2)
- 30246kiku
- ベストアンサー率73% (370/504)
いろいろ方法はあるともいますが、 順を追っていく方法の一例になります。 (クエリをSQLビューで見た時のものになります) 上からテーブル名を「TA1」「TA2」とします。 TA1で、jan を元に最小 id を求めます。 SELECT MIN(TA1.id) AS id, jan FROM TA1 GROUP BY jan; これで、以下結果となります。 001 1111111111 004 2222222222 005 3333333333 007 4444444444 008 5555555555 この結果を元に TA2 と jan で結合します。 SELECT Q1.id, Q1.jan, TA2.ps FROM (SELECT MIN(TA1.id) AS id, jan FROM TA1 GROUP BY jan) AS Q1 INNER JOIN TA2 ON Q1.jan = TA2.jan; これで、以下結果となります。 001 1111111111 02 004 2222222222 06 005 3333333333 01 007 4444444444 05 008 5555555555 02 この結果を TA1 全てと id で LEFT JOIN します。 SELECT TA1.id, TA1.jan, Q2.ps FROM TA1 LEFT JOIN (SELECT Q1.id, Q1.jan, TA2.ps FROM (SELECT MIN(TA1.id) AS id, jan FROM TA1 GROUP BY jan) AS Q1 INNER JOIN TA2 ON Q1.jan = TA2.jan) AS Q2 ON TA1.id = Q2.id; また、別方法で、DMin / DLookup を使って見ると SELECT id, jan, IIF(id = DMin("id","TA1","jan ='" & jan & "'"), DLookup("ps","TA2","jan = '" & jan & "'"), null) AS ps FROM TA1; 今の id が jan での最小値であったら、TA2 から ps を参照するものになります。 (例では jan はテキスト型の場合になります)
- piroin654
- ベストアンサー率75% (692/917)
すこし、クエリを分解しておきます。Q結果を 開くことで結果が示されます。 aaa.tblの場合のようにドットは使えないので、 テーブルをA、B、Cとします。クエリを4つ 作成します。Qa、Qb、Qc、Q結果 です。 Qa SELECT Min(A.id) AS idの最小, A.jan, B.ps FROM A INNER JOIN B ON A.jan = B.jan GROUP BY A.jan, B.ps; Qb SELECT A.id, A.jan, Qa.ps FROM A INNER JOIN Qa ON A.jan = Qa.jan; Qc SELECT A.id, A.jan, Qa.ps FROM A INNER JOIN Qa ON (A.jan = Qa.jan) AND (A.id = Qa.idの最小); Q結果 SELECT A.id, A.jan, Qc.ps FROM A LEFT JOIN Qc ON A.id = Qc.id; これらのSQLをあたらしいクエリのSQLビューに 張り付けてそれぞれの名前で保存してください。
お礼
思い通りの結果が出ました。 重複データの処理なので、重複クエリを使うことだけを考えていました。 また、SQL構文は未熟ですので、どのように質問したらよいか考えていました。 ご回答者様、本当にありがとうございました。