重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

お世話になります。教えてください。

以下の3つのテーブルがあります。
1)ベーステーブル

場所 | かな | 種類
--------------------------
王子 | あ  | 水
王子 | い  | 紙
仙台 | あ  | 紙
青森 | あ  | 鳥
青森 | あ  | 水
秋田 | い  | 鳥
秋田 | あ  | 紙
秋田 | い  | 水

2)かなテーブル
番号 | かな
-------------------
1  | い
2  | あ

3)種類テーブル
番号 | 種類
----------------
1  | 紙
2  | 木
3  | 水
4  | 鳥

で、結果としては


場所 | かな | 種類
--------------------------
王子 | い  | 紙
仙台 | あ  | 紙
青森 | あ  | 水
秋田 | い  | 水

つまり

同じ「場所」で「あ」と「い」があれば「い」を優先して場所を抽出し
その中で い>上>木>水>鳥、 あ>上>木>水>鳥  という条件にて
抽出すると上記のような結果になると思いますが、その方法がわかりません。

sqlで書かれても正直わかりませんので、アクセスについているクエリで
できないでしょうか?

どのようにしても結果が出てきません。
よろしくお願いします。

A 回答 (4件)

> ちなみに上記をsqlにて記述するとどのようにになる


> のでしょうか?

場所 |優先 |番1 | かな |番2 | 種類
-------------------------------------------------
王子 |23 |2  | あ  |3  | 水
王子 |11 |1  | い  |1  | 紙
仙台 |21 |2  | あ  |1  | 紙
青森 |24 |2  | あ  |4  | 鳥
青森 |23 |2  | あ  |3  | 水
秋田 |14 |1  | い  |4  | 鳥
秋田 |21 |2  | あ  |1  | 紙
秋田 |13 |1  | い  |3  | 水

これは、サブクエリを使用しているわけではなく通常のデザインビューで作成できます。

SQL文では、

SELECT
ベーステーブル.*,
[かなテーブル]![番号]*10+[種類テーブル]![番号] AS 優先,
かなテーブル.番号 AS 番1,
種類テーブル.番号 AS 番2
FROM
(ベーステーブル INNER JOIN かなテーブル ON
ベーステーブル.かな = かなテーブル.かな)
INNER JOIN 種類テーブル ON
ベーステーブル.種類 = 種類テーブル.種類;

で、作成できます。
理解しやすいかなと、余分な処理は入れてあります。

サブクエリで1つで出てくるようにすると、
SELECT
ベーステーブル.*
FROM
(ベーステーブル INNER JOIN かなテーブル ON
ベーステーブル.かな = かなテーブル.かな)
INNER JOIN 種類テーブル ON
ベーステーブル.種類 = 種類テーブル.種類
WHERE
(かなテーブル!番号*10+種類テーブル!番号)
=(SELECT
Min(Subかなテーブル!番号*10+Sub種類テーブル!番号) AS 優先
FROM
(ベーステーブル AS Subベーステーブル
INNER JOIN かなテーブル AS Subかなテーブル ON
Subベーステーブル.かな = Subかなテーブル.かな)
INNER JOIN 種類テーブル AS Sub種類テーブル ON
Subベーステーブル.種類 = Sub種類テーブル.種類
GROUP BY
Subベーステーブル.場所
HAVING
(Subベーステーブル.場所= [ベーステーブル]![場所] )
)));

で、1つサブクエリを条件に書いた場合の例です。

他にも方法がありますけど、思いつくSQL文でこれを含めて3通りかな?

追伸
私も、いきなりSQL文を打ち込んでいるわけではなく、デザインビューで作成、SQLビューでコピー&ペーストで貼り付けて作成仕上げてます。
多重にクエリーを動作させているものは、最終的にはサブクエリを使用すれば、どれも1クエリに変更は可能ですが、編集しなおす時(仕様変更時)に大変になりますので多重のまま、使用された方が訂正は簡単です。
    • good
    • 0

#1です。


できました?
いっぺんにというのは難しいと思いますよ。

でちょっと気になったのは、#2の方への返答で、
>ちなみに上記をsqlにて記述するとどのようにになるのでしょうか?
とありましたが、SQLビューはご存知ないですか?
クエリーのデザインビューで、クエリーウィンドウのタイトルバーを右クリックしてSQLビュー選べば出てきます。
いろいろ組み合わせてみて、どのようなSQL文になるか見てみると勉強になりますよ。
    • good
    • 0

横から失礼します。



サブクエリを使用すれば1つで出来そうですが、SQL文が理解できないと言うことで、段階を追っているのだと思うのですが・・・。

私の方も、とりあえずの解決例^^;

場所 |優先 |番1 | かな |番2 | 種類
-------------------------------------------------
王子 |23 |2  | あ  |3  | 水
王子 |11 |1  | い  |1  | 紙
仙台 |21 |2  | あ  |1  | 紙
青森 |24 |2  | あ  |4  | 鳥
青森 |23 |2  | あ  |3  | 水
秋田 |14 |1  | い  |4  | 鳥
秋田 |21 |2  | あ  |1  | 紙
秋田 |13 |1  | い  |3  | 水

優先:[かな].[番号]*10+[種類].[番号]
番1:[かな].[番号]
番2:[種類].[番号]

と言うクエリを作成し、優先の最小値を取得、表示のし直しで出来ると思います。

で、10にしてあるところを適当に数値を増やせば、ある程度レコード数が増えても対処可能だと思いますが・・・。

書いている意味、理解可能ですか?
    • good
    • 0
この回答へのお礼

ありがとうございます。

えーと、sqlについてはまったくわからないというほどではありません。(笑)
ただサブクエリって使ったことないので・・・
ちなみに上記をsqlにて記述するとどのようにになるのでしょうか?
チャレンジしてみたいので教えていただけますか?

おっしゃっている意味は少しは理解できてると思います。

お礼日時:2005/11/08 17:40

とりあえず、思いつくままに書いていくので、もっと効率のいい方法があるかもしれません。



第1段階:
(1)ベーステーブルと、かなテーブルをかなで結合
結合プロパティは、ベーステーブルが全レコード。
(2)出力するフィールドは、ベーステーブルの場所とかなテーブルの番号。
(3)グループ化(ツールバーのΣボタン)
(4)「番号」フィールドの「集計」欄を「グループ化」から「最小」に変更
(5)このクエリを保存(便宜上クエリ1とします)

第2段階:
(1)クエリ1とかなテーブルを番号で結合。(プロパティは両方)
(2)クエリ1の「場所」とかなテーブルの「かな」を出力フィールドにする。
(3)このクエリを保存(クエリ2)。
ちなみにこのクエリを実行すると以下のテーブルが得られるはずです。
場所 | かな
--------------
王子 | い  
仙台 | あ 
青森 | あ 
秋田 | い 

第3段階:
(1)ベーステーブルとクエリ2を、場所とかなで結合(両方)
(2)ベーステーブルの全フィールドを出力フィールドにする。

あとは同じようなことをかなテーブルを種類テーブルにおきかえてもう一回繰り返すだけなので、できると思いますが、わからなければまた質問してください。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
やはり数回に分けてやらなければならないのですかね。
とりあえずやってみます。
ありがとうございます。

お礼日時:2005/11/08 16:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!