![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
Aテーブルにグループ番号、ID番号、氏名、ステータスフラグが格納されており、BテーブルにID番号、氏名、電話番号、住所が格納されているとします。検索したい条件は、同じグループの中で、ステータスフラグがたっているレコードが1件でもあれば、ID番号を使って、Bテーブルと結合してグループ番号でGROUP BYしてデータがとりたいのです。例えば、Aテーブルにグループ番号001のグループ番号を持つレコードが5レコードあり、そのうちステータスフラグがたっているレコードが1レコード。002のグループ番号を持つレコードが3レコードあり。ステータスフラグがたってるのが0レコードだとします。結果として、001のグループはステータスフラグがたっているレコードがあるから、検索対象になるが、002はステータスフラグがたっているレコードがないので、検索対象にならないといった具合なんですが・・・。よろしくお願いします。自分で考えたSQLは次のものです。SELECT * FROM A, B WHERE A.ID_NUMBER=B.ID_NUMBER GROUP BY A.GROUP_NUMBER HAVING COUNT(A.STATUS=1)>0 こんな感じです。ただCOUNT関数ではこれではダメみたいで・・・。まだ、1年目の新人なので、どなたかご教授お願いします。
No.2ベストアンサー
- 回答日時:
コピペするのに、1行とんだ..
こちらが正しいSQL。
select *
from A,B
where
A.グループ番号 in
(select distinct グループ番号 from A where ステータスフラグ=1) and
A.ID番号=B.ID番号
No.4
- 回答日時:
索引の有無やデータ量等によっては、優劣が出てくるかと思いますが..
相関サブクエリ(EXISTS条件)やメンバーシップ検査(IN条件)、
インラインサブクエリとの結合など、複数の解決方法があり、
何の前提もおかず考えると、好き嫌い程度の違いでしかないと
思います。
とはいうものの...
#3
HAVINGを使うのであれば、
SELECT A.*,B.*
FROM
A,
B,
(
select グループ番号
from A
where ステータス=1 /* ここ */
group by グループ番号
having count(*) > 0 /* ここ */
) C
WHERE
C.グループ番号=A.グループ番号 AND A.ID番号=B.ID番号
;
のように、where句を省略しては、いけません。
where句で対象を絞れるにもかかわらず、そうしないのは
実行効率の観点で×です。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_16.png?e8efa67)
No.3
- 回答日時:
どうしても GROUP BY が使いたいのであれば・・・。
SELECT *
FROM A A,
B B,
(SELECT グループ番号
FROM A
GROUP BY グループ番号
HAVING COUNT(ステータス) > 0 ) C
WHERE C.グループ番号 = A.グループ番号
AND A.ID番号 = B.ID番号
こんな感じでもできますよ
No.1
- 回答日時:
次のようなSQLで良いかと思います。
select *
where
A.グループ番号 in
(select distinct グループ番号 from A where ステータスフラグ=1) and
A.ID番号=B.ID番号
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- Access(アクセス) ACSESS初心者です マンション管理をACCESSで出来ないかとチャレンジしています。 リレーショ 3 2022/10/08 11:45
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- スピーカー・コンポ・ステレオ レコードのマトリクス番号の見方を教えてください。 最近レコードの知識が少しずつ増え、最近マトリクス番 1 2022/08/14 13:58
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- MySQL SQLでカラムを追加し、条件に合致した場合にフラグ(レコード)を付与する方法 2 2022/05/18 23:54
- Visual Basic(VBA) 【ExcelVBA】Powerクエリーでいうピボット解除と同じ処理をVBAで 4 2022/07/06 17:09
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【PL/SQL】FROM区に変数を使う方法
-
group byの並び順を変えるだけ...
-
SELECT FOR UPDATE で該当レコ...
-
単一グループのグループ関数で...
-
【SQL】違うフィールド同士の集...
-
「数字で始まらない」ものを抽...
-
phpmyadminでワイルドカードを...
-
where句中のtrim関数について
-
大量レコードをTRUNCATEせずに...
-
引数によってwhere句を切り替え...
-
SQLで条件にヒットしたレコード...
-
PL/SQLでフェッチでNULLの項目...
-
データ
-
AccessのSQL文で1件のみヒット...
-
ORCALE SQL 複数のGROUP BY
-
ACCESS レコードの並び順について
-
SQL*Loader Append
-
トランザクションログを出力せ...
-
アクセスのレポートでレコード...
-
SQLローダーCSV取込で、囲み文...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
単一グループのグループ関数で...
-
【PL/SQL】FROM区に変数を使う方法
-
SQL*Loader Append
-
where句中のtrim関数について
-
AccessのSQL文で1件のみヒット...
-
group byの並び順を変えるだけ...
-
アクセスのレポートでレコード...
-
トランザクションログを出力せ...
-
データ
-
SELECT FOR UPDATE で該当レコ...
-
SQLで条件にヒットしたレコード...
-
「数字で始まらない」ものを抽...
-
引数によってwhere句を切り替え...
-
1レコード全てを改行なしで表...
-
BLOB型項目をSQLの検索条件に指...
-
updateで複数行更新したい
-
【SQL】違うフィールド同士の集...
-
osqleditについて
-
レコードの更新履歴について
-
あるカラムに同じ値を持つレコ...
おすすめ情報