【Access 2013 VBA / SQL】
[親Table]
*ID1
*日付
*受注元会社名
{子Table ]
*ID2(主キー)
*ID1(親テーブルのID)
*ID3(外部キー)
[Table B]
*ID3
*会社名
------------------------------
ID2 ID1 会社ID
------------------------------
1 1 A
2 1 B
3 1 B
4 1 C
5 2 B
6 2 A
7 2 A
------------------------------
ID1=1のもので、会社IDを一意にして選択した会社名を表示したい
この時、SQLでどのように書けばよいでしょうか
No.3ベストアンサー
- 回答日時:
会社名だけならもっとシンプルに出せるかと思います。
SELECT [Table B].会社名
FROM [Table B]
WHERE EXISTS (
SELECT 0
FROM [子Table]
WHERE [子Table].ID3 = [Table B].ID3
AND [子Table].ID1 = 1
);
この回答への補足
SELECT [Table B].会社ID, [Table B].会社名
FROM [Table B]
WHERE EXISTS (
SELECT 0
FROM [子Table]
WHERE [子Table].ID3 = [Table B].ID3
AND [子Table].ID1 = 1
);
教えて頂いたSELECT文に、会社IDも追加してみたらうまく出来ました。これなら、コンボボックスにも使えそうです。
ありがとうございました。
このselect 0 from tablename は、ネットで調べたら、where句の条件に合致するレコードが存在するかどうかを調べるときに使うとかいてありました。
この戻り値は、レコードがある場合、0になるのでしょうか。それとも、1?
レコードがない場合には、Nullでしょうか?
No.5
- 回答日時:
#1、#2です
#2のGroupbyは、2番目をMAXかMINで囲む前提です。
ルールがわからないので、どちらかお好きな方でどうぞ
ありがとうございます。
教えて頂いた例を使って見たのですが、max( 会社ID)でくくると、そのレコード数が出てきたような・・・違いますか。3が出たのですが、この数字の意味が良くわかりません。レコードは、全部で5ですので。つまり、会社IDで一番多いIDの数がとれたということでしょうか・・・
私がしたいことは重複した会社IDを一意にすることなので、この方法はそれとは違いますが、でも、勉強にはなりました。
No.4
- 回答日時:
> この戻り値は、レコードがある場合、0になるのでしょうか。
> それとも、1?
『SELECT 0 … の戻り値』としては当然 0 です。
『EXISTS(SELECT 0 … の戻り値』は、レコードが存在すれば
TRUE が返ります。
> レコードがない場合には、Nullでしょうか?
『SELECT 0 … の戻り値』は、レコードがない場合は何も返っ
てきません。それは『SELECT 会社名 FROM [Table B]; で、
1件も取得できなかった場合に、会社名 には何が入るのでしょう
か?』という質問と同じで、意味がありません。
レコードが取得できなかったのですから、Null ですらありません。
『EXISTS(SELECT 0 … の戻り値』は、レコードが存在しな
ければ FALSE が返ります。
EXISTS は『EXISTS 以下のSELECT 文の結果が存在するか
否か』で判別しますので、EXISTS 内の SELECT 句の内容は
何を指定しても OK です。
EXISTS (SELECT * … でも EXISTS (SELECT Null … でも
EXISTS (SELECT 'I need you(はぁと)' … でも。
# 私は、コーディング規約で特に規定されていない限り、
# 「なんとなく」ゼロを使うことが多いです。
ご回答ありがとうございます。
Select 0 の戻り値が、0になり、存在しない場合には、
Rst.EOF = true and Rst.BOF = true
となるという事なのでしょうね。
No.2
- 回答日時:
#1、エラーだらけだ。
ごめんなさい。Select distinct tblA.ID1, tblC.[会社ID]
From [親テーブル] tblA, [子テーブル] tblC, [Table B] tblB
Where tblA.ID1 = tblC.ID1 and tblC.ID3 = tblB.ID3
And tblA.ID1 = 1;
group by なら
Select tblA.ID1, tblC.[会社ID]
From [親テーブル] tblA, [子テーブル] tblC, [Table B] tblB
Where tblA.ID1 = tblC.ID1 and tblC.ID3 = tblB.ID3
And tblA.ID1 = 1
Group by tblA.ID1
;
会社IDを強制的にひとつにするならGroupbyにして
tblC.[会社ID]をMax()かMIN()で囲うとか
ありがとうございます。
Select distinct tblA.ID1, tblC.[会社ID]
From [親テーブル] tblA, [子テーブル] tblC, [Table B] tblB
Where tblA.ID1 = tblC.ID1 and tblC.ID3 = tblB.ID3
And tblA.ID1 = 1;
こちらの例をもとに、うまく出来ました。
2個目の例は
select distinct [TblA].[依頼ID],
[TblC].[会社ID],
[TblB].[会社ID]
from [依頼テーブルA] as [TblA],
[分析管理テーブルC] as [TblC],
[会社管理テーブルB] as [TblB]
where
[TblA].[依頼ID]=[TblC].[依頼ID]
And [TblC].[会社ID]=[TblB].[会社ID]
And [TblA].[依頼ID] = 1
Group by [TblC].[会社ID]
このようにしたのですが、
「クエリに、集計関数の一部として指定された式「依頼ID」が含まれていません。」
というエラーになります。
No.1
- 回答日時:
また属性が書かれてないが、親テーブルのIDは数値型と仮定
欲しいのは「会社名」だろうが、
会社IDはABCって「揺らぎ」なんてレベルじゃないけど
そこらへんは適宜修正してください
Select distinct tblA.ID, tblB.会社名
From [親Table] tblA, [子Table] tblC, [Table B] tblB
Where tblA.ID1 = tblC.ID2 and tblC.ID3 = tblB.ID2
and tblA.ID = 1
;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- Access(アクセス) Accessの参照フィールドの列がずれてしまいます 1 2023/07/19 15:00
- MySQL MYSQL エラー 2 2022/10/18 11:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessで更新した項目の抽出
-
データの二重表示の原因
-
Accessにインポートしたら並び...
-
ACCESS重複のチェック
-
数百万件レコードのdelete
-
フォームからのレコード削除に...
-
Access VBA Me.Requery レコー...
-
レコードロックする方法
-
時系列データの抜けの調べ方
-
Access2007 削除クエリで複数テ...
-
複数レコードをUPDATE文一文で...
-
同じ構成のテーブルを結合する
-
Accessで重複したデータを一件...
-
物理消去から論理消去への変更
-
Accessでの排他制御
-
Excel→Accessテーブル インポ...
-
3つ以上のテーブルをUNIONする...
-
accessで検索&入力 データの...
-
2つの項目が重複するレコード...
-
Access カレントレコードがあり...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessにインポートしたら並び...
-
データの二重表示の原因
-
2つの項目が重複するレコード...
-
3つ以上のテーブルをUNIONする...
-
数百万件レコードのdelete
-
Access VBA Me.Requery レコー...
-
非連結サブフォームのレコード...
-
Access 削除クエリが重い
-
ACCESSのBookmarkプロパティの...
-
Access 1レコードずつcsvで出力...
-
ManagementStudioからのデータ削除
-
Accessの重複クエリで最小以外...
-
Accessでの排他制御
-
Accessで重複したデータを一件...
-
(ACCESS)並び替えをしないで...
-
フォームからのレコード削除に...
-
Accessでレコードが更新された...
-
Accessでの禁止文字チェック
-
SQLServerで同一条件レコードの...
-
テーブルのレコード削除ができ...
おすすめ情報