- 締切済み
3つのテーブルからの抽出SQL
表1・・・商品ID 表2・・・商品ID、賞味期限、価格ID 表3・・・価格ID、商品価格 このような表があるとします。 ここで、商品価格ごとにもっとも賞味期限の古い商品IDを表示させてい場合、どのようなSQL文を書けばよいでしょうか? また、オラクル8でお願いします。 例題となるテーブルとレコードが紛らわしいですが、よろしくお願いいたします。
- oracle2007
- お礼率16% (8/48)
- Oracle
- 回答数3
- ありがとう数6
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- SUPER-NEO
- ベストアンサー率38% (706/1857)
質問にあるようなテーブルであれば、3表も結合する必要は 無いと思いますが、何か3表使わなければならない理由でも あるのでしょうか? 質問者さんとしても何も考えてはおられないと思いますが、 どういった SQL をお考えでしょうか? SELECT T.商品ID FROM ( SELECT T2.商品ID, MIN(T2.賞味期限), T2.価格ID FROM 表2 T2 GROUP BY T2.商品ID, T2.価格ID ) T;
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
R8.1.xでなく、R8.0.xですか... select T2.価格ID from T2,T3 where T2.価格ID=T3.価格ID and (T3.商品価格,T2.賞味期限) in ( select T3.商品価格,min(T2.賞味期限) from T2,T3 where T2.価格ID=T3.価格ID group by T3.商品価格 ) とか select T2.価格ID from T2,T3 where T2.価格ID=T3.価格ID and not exists ( select 1 from T2 X2,T3 X3 where X2.価格ID=X3.価格ID and X2.価格ID=T2.価格ID and X3.商品価格=T3.商品価格 and X2,賞味期限<T2賞味期限 ) とかで出来るんじゃないですかね。 テストしてないですけど。
- chukenkenkou
- ベストアンサー率43% (833/1926)
「三つのテーブルからの集計」というタイトルですが、この質問内容だと、表1を結合する必要はないのでは? 「表1に商品名があり、商品IDを商品名に変換」なら、3表の結合が必要になりますが。
関連するQ&A
- 1つのSQLで2段階の抽出を行いたい
恐らくそれほど複雑なSQLではないと思いますが、中々SQLが作成できず困っています。 回答いただければ嬉しいです。 以下のテーブルがあったと仮定します。 テーブル名: 売上げ明細 カラム: ・商品ID … 売上げ明細なので一意ではありません ・単価 … 同じ商品IDでも、レコードによって単価は異なります ・数量 … 1~5の整数のみとします 実際のデータは以下の通りです。 商品ID,単価,数量 1001,50,2 1001,60,5 1002,90,3 1003,60,5 1003,80,4 1003,90,1 1004,60,3 上記データを以下の通り抽出するには、どのようなSQLを組めばいいでしょうか? 1.まず各商品IDの中から単価が最大のレコードだけを取り出す 商品ID,単価,数量 1001,60,5 1002,90,3 1003,90,1 1004,60,3 2.次に数量でgroup by して、件数をカウントする 数量,件数 1,1 3,2 5,1 1つのSQL文で2の結果が得られれば、途中の抽出条件は特に問いません。 ちなみにMySQL5を使っています。 よろしくお願いします。
- ベストアンサー
- MySQL
- SQL文の構築について教えてください。
SQL文の構築について教えてください。 こんばんは。Oracle9iのデータベース検索で、どうしてもSQLが思い浮かばないため、質問させていただきます。 ■Table ID NUM SIGN 100 1 A 100 2 A 101 1 A 102 1 B 103 1 B 104 1 C 首キーはID、NUMです。 上記のようなテーブルで、 IDが同一かつNUMが最大のもので、 SIGNが同一のレコードで、2件以外のレコードを抽出したいです。 (例表でいうと、ID104のレコードのみが抽出されるようにしたい) すこし急ぎなんですが、SQLが得意でお時間がある方、力を貸していただけないでしょうか。 よろしくお願い致します。
- ベストアンサー
- Oracle
- こちらのテーブルにあってこちらのテーブルにないIDを抽出するSQL
お世話になってます MySQLでデータを格納しております。 以下のようにUserTable,Userinfoという2つのテーブルがあったとします。 ■UserTable -ID(key) -username ■Userinfo -ID(key) -user_info1 -user_info2 UserTableはユーザID作成時に自動でレコードが生成されます。 登録されたユーザは自分の情報を自分自身で登録することにより Userinfoテーブルにレコードが生成されます。 ここで、ユーザIDを作成したユーザのうち、自分の情報を登録していない ユーザIDを抽出したいのですが、この場合、どのようなSQLを書けばよいのでしょうか・・・? ユーザIDが、UserTableにあって、UserInfoにない、というものを作ればよいのですが・・・ SQLだけじゃ無理でしょうか・・・?
- ベストアンサー
- MySQL
- これを抽出するSQLを教えてください
どういうSQLを書けばこれが実現出来るのか分からないので教えて下さい。 テーブル名 f_table というテーブルがあります。 このテーブルには、f_id,u_id,day(日付)という三つの列があり、下記のようにデータが入っているとします。 f_id u_id day 1 1 2007/3/8 2 2 2008/1/2 3 2 2008/1/10 4 1 2007/2/12 このf_tableから、各u_idで一番日付の新しいf_idを抽出する(この表の場合f_idの1と3が抽出される)にはどういうSQLで出来るのでしょうか? ※実際の表ではu_idに入っている数字の種類は1と2だけではなく、もっと沢山あります。 ご回答よろしくお願いします。
- 締切済み
- MySQL
- SQLコマンドによるデータ抽出について
例えば 商品マスタという商品ID、商品名、単価のフィールドを含んだテーブルと 販売履歴というID、商品ID、販売日時というフィールドを含んだテーブルがあります。 各商品の一番最後に売れた販売日時を知るために この2つのテーブルからSELECT文で商品ID、商品名、販売日時の フィールドを結果として返すSQL文を作りたいです。 各商品なので全く売れていない商品でも商品IDと商品名だけは結果に欲しいです。 どなたかSQLに詳しい方、教えてください。
- ベストアンサー
- Visual Basic
- ORACLEでのSQL、シンプルな方法は?
ORACLEでのSQL文について質問です。 SQLで条件に合うレコードがあるかどうかはどう判別するのでしょうか? 画面で2つの条件を選んで テーブル ・ステータス ・フラグ 条件に合うレコードがなければINSERT 条件に合うレコードがあればUPDATE レコードが元々あるが、画面で指定された条件から外れる場合はDELETE としたいのですが、うまくSQLが書けません。 レコードがあればupdate、なければinsertするというのは多いのですが。 何かシンプルな方法はないでしょうか。
- 締切済み
- Oracle
- あるテーブルの内容を基準にして違うテーブルを更新するSQL文
教えて下さい。 あるテーブルに下記の内容があります。 ID│名称 ─┼─── 1│花 2│木 3│水 もうひとつのテーブルには、 ID│名称 ─┼─── 1│海 3│水 4│空 となっています。 最初のテーブルの全レコードを対象に、最初のテーブルのIDと同じ値がもうひとつの テーブルにある場合、もうひとつのテーブルをUPDATEし、存在しなければINSERTしたい です。 結果を ID│名称 ─┼─── 1|花 2│木 3│水 4│空 を期待しています。 このようにするSQL文を教えていただけませんでしょうか。 よろしくお願いします。
- ベストアンサー
- その他(データベース)
- 2つのテーブルを比較して、不一致レコードを抽出するSQL文
2つのテーブルを比較して、不一致レコードを抽出するSQL文を教えてください。まったくの初心者なので、よろしくお願いします。
- ベストアンサー
- その他(データベース)
- テーブルの権限について
オラクル8.1.6を使っています。ていうか商品名は関係ないと思うのですが、 SQL文でテーブルを作るときに2つの列を併せて1つのプライマリキーにする文はどうやって書けばよろしいのでしょうか? 文を詳しくよろしくお願いします。
- ベストアンサー
- その他(データベース)
- この場合のSQL構文を教えてください(MYSQL5.0)
お世話になります。下記の場合どうしたらできるかどうか教えてください。 ・商品リストテーブル 商品ID(int primary key auto_increment ) 商品名(char) ・受注リストテーブル 受注ID(int primary key auto_increment ) 商品ID(int) 注文者(char) 上記のように二つのテーブルに分かれています。 (1)新商品の注文が入ると、商品リストテーブルにレコードがINSERTされ 受注リストにも同時にINSERTされるとします。 (2)すでに商品リストテーブルに登録済みの商品名の場合は受注リストテーブルのみINSERTされます。 この場合、商品リストの商品IDは自動インクリメントされるので問題ないですが、受注リストの商品IDはインクリメントされません。 商品リストに新レコードができると、このリストの商品IDは新しい番号がふられますが、この新しくできた番号を受注リストの商品IDに同時にいれたいのです。 ○方法として 二つのテーブルをJOINしてレコードをINSERTできるのならしたいのですが、どうゆうSQL文を書けばいいのかわかりません。 またその方法以外にとりあえず商品リストテーブルにだけINSERTしてそのタイミングで受注リストテーブルにトリガでINSERTとかする方法もありなんでしょうか? できればJOINした方にINSERTする方法でやりたいのですが、無理なら後者のほうでもいいんですが・・・。 SQL文わかる方どうかよろしくお願いいたします。
- ベストアンサー
- MySQL