- - PR -
サブクエリでのレコード取得について質問させてください。
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-12-05 17:03
サブクエリを用いたSQL文について教えていただけませんでしょうか。
内容は、 Aテーブル Bテーブル キー項目aaa キー項目aaa 枝番bbb この2テーブルをJOINしてAテーブルのキー項目ごとに紐づいた一番小さい枝番を取得するというものなのですが、 当初、 SELECT * FROM Aテーブル INNER JOIN Bテーブル ON Aテーブル.キー項目aaa = Bテーブル.キー項目aaa where = ( select min(Bテーブル.枝番bbb) from Bテーブル ) これで問題無いかと思っていたのですが、これでは全レコード中一番小さい枝番の値と 同じ値が入っているレコードの取得 となってしまうようで、 私が意図しているデータが得られませんでした。 キー項目ごとに紐づいた枝番で、一番小さい数値の一覧を取得する場合、 どのような記述を行うべきなのでしょうか? 検索で色々なページを参照しましたが、このようなケースが記載されているページはありませんでした。 環境はSQL Server2005です。 よろしくお願い致します。 [ メッセージ編集済み 編集者: 馬岱 編集日時 2007-12-05 17:04 ] [ メッセージ編集済み 編集者: 馬岱 編集日時 2007-12-05 17:05 ] [ メッセージ編集済み 編集者: 馬岱 編集日時 2007-12-05 17:05 ] | ||||
|
投稿日時: 2007-12-05 17:43
キー項目ごとの枝番の最小値であれば、Bテーブルだけでも取得できるのでは?
select キー項目aaa,min(枝番bbb) from Bテーブル group by キー項目aaa また、これと一緒にAテーブルのキー項目以外のカラムも表示したいのであれば、 select A1.*, A2.枝番最小値 from Aテーブル A1, (select キー項目aaa,min(枝番bbb) as 枝番最小値 from Bテーブル group by キー項目aaa ) A2 where A1.キー項目aaa = A2.キー項目aaa で、いかがでしょうか。 | ||||
|
投稿日時: 2007-12-05 17:47
Bテーブルの一番小さい枝番を拾うために
キー項目aaaでグループしたBテーブルを作成(エイリアス名'B2') もとのBテーブルにくっつけて最小枝番だけのテーブルBを作成 あとはそれとAテーブルを JOIN させればよいかと。
//編集 かぶった。 私のはBテーブル軸ですね…。 [ メッセージ編集済み 編集者: よっし〜。 編集日時 2007-12-05 17:52 ] | ||||
|
投稿日時: 2007-12-05 18:06
> 一番小さい枝番
「枝番」て意味の無いシーケンシャルの値ってイメージがあります。 大抵の場合、0とか1じゃないですか? とまあそれはさておき、以前類似スレッドがありましたよ。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=41134&forum=26 | ||||
|
投稿日時: 2007-12-06 10:02
レスありがとうございます。
crabさんとよっし〜。さんのやり方で、意図したデータの取得が出来ました! 本当にありがとうございますm(_ _)m >こあらさん 枝番そのものはシーケンシャルでふられるのですが、 その枝番レコードは無作為に削除される為に、 今回は抜き出す枝番付きのレコード番号を決め撃ち出来ませんでした。 後付情報で申し訳ありません。 指摘いただいたスレッドもこちらを立てる前に見ているのですが、 類似ケースだということがわかりませんでした…これから精進したいと思います。 皆さん本当にありがとうございました。 検索で役立つかもしれないので、今回のコードを私が解釈した内容で 以下に記述します。 ・crabさんのコード select A1.KEYno, A2.MIN_SEQno from Table_A A1, ( select KEYno, min(SEQno) as MIN_SEQno from Table_B group by KEYno ) A2 where A1.KEYno = A2.KEYno ・よっし〜。さんのコード select * from Table_B B1 inner join ( select KEYno, MIN(SEQno) as MIN_SEQno from Table_B group by KEYno ) as B2 on B1.KEYno = B2.KEYno and B1.SEQno = B2.MIN_SEQno |
1