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句で対象を絞れるにもかかわらず、そうしないのは
実行効率の観点で×です。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
where句中のtrim関数について
-
トランザクションログを出力せ...
-
データ
-
単一グループのグループ関数で...
-
SELECT FOR UPDATE で該当レコ...
-
【PL/SQL】FROM区に変数を使う方法
-
group byの並び順を変えるだけ...
-
負荷試験の後重くなります。。。
-
SQLで条件にヒットしたレコード...
-
アクセスのレポートでレコード...
-
ACCESS レコードの並び順について
-
「数字で始まらない」ものを抽...
-
AccessのSQL文で1件のみヒット...
-
トリガからプロシージャのコー...
-
引数によってwhere句を切り替え...
-
PL/SQLでフェッチでNULLの項目...
-
SQL*Loader Append
-
ACCESS2007のエクスポート上限
-
oracle 2つの列の比較
-
レコードの更新履歴について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【PL/SQL】FROM区に変数を使う方法
-
単一グループのグループ関数で...
-
where句中のtrim関数について
-
SQL*Loader Append
-
SELECT FOR UPDATE で該当レコ...
-
group byの並び順を変えるだけ...
-
AccessのSQL文で1件のみヒット...
-
アクセスのレポートでレコード...
-
トランザクションログを出力せ...
-
引数によってwhere句を切り替え...
-
データ
-
SQLで条件にヒットしたレコード...
-
1レコード全てを改行なしで表...
-
「数字で始まらない」ものを抽...
-
BLOB型項目をSQLの検索条件に指...
-
ACCESS レコードの並び順について
-
PL/SQL内の共通関数の引数にフ...
-
デフォルトでデータが表示され...
-
【SQL】違うフィールド同士の集...
-
osqleditについて
おすすめ情報