- ベストアンサー
できる人には、簡単な問題だと思うのですが・・・・
以下のようなテーブルがあります。 ■ tb_order (注文テーブル) ※pkey は、order_cd order_cd | user_cd | sale_cd 100 user1 A 200 user2 A 300 user3 B 400 user3 A ■ tb_order_goods(注文商品テーブル) ※pkey は、order_goods_id order_goods_id | pay_dt | order_cd 001 20040812 100 002 100 003 20040812 100 004 20040813 200 005 300 006 400 007 20040814 400 008 400 #データの状態# (user_cd=user1)の人が、あるセール(sale_cd=A)の日に 3つの商品(order_goods_id=001,002,003)を、注文しました(order_cd=100)。 前払いをした商品には、pay_dtが入ります。 #質問# sale_cd が Aのときに、前払いした人のuser_cdを取得したいのですが、 どのようなSQL文を作れば効率がいいのでしょうか? select user_cd from tb_order where sale_cd='A' and order_cd in ( select distinct order_cd from tb_order_goods where pay_dt is not null); とやれば、取得できると思いますが、tb_order_goods の全データを見てからの 抽出なので、効率が悪い気がします。 tb_order から、sale_cd='A' のorder_cd を抽出してて、order_cd を限定してから、 tb_order_goodsで、pay_dt is not nullをすれば、より早いと思うのですが・・・。 JOIN等の結合を使えばいいと思うのですが(多分)、 どのような結合がこの場合に適したものになるのか分からないため、 教えていただければと思います。
- みんなの回答 (2)
- 専門家の回答
関連するQ&A
- Access DLOOKUPについて
Access DLOOKUPについて こんにちは。Access2010でのDlookupについてお教えください。 ■注文テーブル オーダーID,商品コード,数量,お店番号 001,A01,1,お店1号 001,A02,5,お店1号 002,B01,3,お店2号 002,B02,3,お店2号 ※同一オーダーIDで商品コードが重複する事は無 ■確認用注文テーブル 商品コード,数量,お店番号 A01ですよ,1お店1号 B02です,3,お店2号 ※なんと、オーダーIDがありません。さらに商品コードに変な文字列も入っています。 ■やりたい事 フォームに「判定」というテキストボックスを配置しました。 コントロールソースで以下の条件にあっているなら○、あっていないなら×と表示したいです。 ○注文テーブル.商品コードと確認用注文テーブル.商品コードを比較。 注文テーブル.商品コードのデータが確認用注文テーブル.商品コードに含まれていること。 ○注文テーブル.数量と確認用注文テーブル.数量がイコールであること。 ○注文テーブル.お店番号と確認用注文テーブル.お店番号がイコールであること。 これらを満たしていれば、○、満たしていなければ×と表示したいです。 Dlookupでなくても、何か他に方法がありましたらお教えください。 宜しくお願いします。
- ベストアンサー
- その他(データベース)
- 二つのテーブルの条件抽出の仕方を教えてくださ
SLIP +----------------------+----------------------------------+----------------------------------+ | SLIP_ID | STORE_ID |AGGREGATE_BALANCE | +----------------------+----------------------------------+----------------------------------+ | 10001 | 10000 | 25000 | | 10002 | 10000 | 150000 | +----------------------+----------------------------------+----------------------------------+ SLIP_PAY +----------------------+----------------------------------+----------------------------------+ | SLIP_ID | PAY_DATE | PAY_MONEY | +----------------------+----------------------------------+----------------------------------+ | 10001 | 2011-08-16 | 5000 | | 10001 | 2011-08-16 | 1000 | | 10001 | 2011-08-16 | 5000 | | 10002 | 2011-08-16 | 2000 | +----------------------+----------------------------------+----------------------------------+ 下記のSQLを発行すると、テーブル(1)が帰ってきますが、 テーブル(2)のような結果を返すようにするには、 SQLをどう記載すればいいでしょうか? どうかご教授お願いいたします。 SELECT slip.STORE_ID, SUM( slip_pay.PAY_MONEY ) , slip.AGGREGATE_BALANCE FROM SLIP AS slip, SLIP_PAY AS slip_pay AND slip.SLIP_ID = slip_pay.SLIP_ID AND slip_pay.PAY_DATE LIKE '2011-08%' GROUP BY slip.SLIP_ID DESC ORDER BY SUM( slip_pay.PAY_MONEY) DESC テーブル(1) +---------------+------------------------------------------+-----------------------------------+ | STORE_ID | SUM( slip_pay.PAY_MONEY ) | AGGREGATE_BALANCE | +---------------+------------------------------------------+-----------------------------------+ | 10000 | 11000 | 25000 | | 10000 | 2000 | 150000 | +---------------+------------------------------------------+-----------------------------------+ テーブル(2) +---------------+------------------------------------------+-----------------------------------+ | STORE_ID | SUM( slip_pay.PAY_MONEY ) | AGGREGATE_BALANCE | +---------------+------------------------------------------+-----------------------------------+ | 10000 | 13000 | 175000 | +---------------+------------------------------------------+-----------------------------------+
- ベストアンサー
- MySQL
- グループ化したテーブルと他のテーブルの結合について
お世話になります。PHP+MySQLでシステムを作っています。 商品のカテゴリーのテーブル・・・hametome_category(主キー:category_id ) 商品のテーブル・・・hametome_item(主キー:item_id ) 注文のテーブル・・・hametome_order(主キー:order_id ) 上記の3つのテーブルがあります。各テーブルにはそれぞれ、下記のようなデータを格納していて()内のカラムが含まれています。 hametome_category・・・カテゴリー名(category_id) hametome_item・・・商品名、単価など(category_id、item_id) hametome_order・・・注文内容等(category_id、item_id) この3つのテーブルを使い、カテゴリーごとの商品の一覧表を作り、一覧表の中に商品ごとの注文数量の累計を表示させたいと思っています。 【作りたい表のイメージ図】 単価 在庫数 注文数累計 商品A 100 1500 11000 商品B 120 1000 13000 商品C 130 1700 18000 ・ ・ ・ 表がずれていたらスイマセン^^; SELECT文を使ってデータを抽出するのですが、この際、 $sql="select * from hametome_category c,hametome_item i where i.category_id = $id and c.category_id = i.category_id ORDER BY item_id"; このようにすると任意のカテゴリーに属する商品の一覧表を出力する事は出来るのですが($idは前ページからPOSTされてきます。)、これに注文内容のデータ抽出を組み合わせようとするとうまくいきません。 この表に注文内容(hametome_orderに登録されているデータ)をitem_idでグループ化し合計したものを表示させたいです。 $sql="select *,SUM(order_amount) AS goukei from hametome_order GROUP BY item_id"; とすれば、注文数の累計をitem_idで合計しグループ化する事は出来るのですが(『order_amount』はhametome_orderテーブルに登録されている注文数です。)、この内容を最初のSELECT文にうまく組み込む事が出来ません。 どのようにすれば思うような結果を得られるでしょうか?ご教授のほどよろしくお願い申し上げます。
- ベストアンサー
- MySQL
- mysqlでのsql文
石井と申します。 下記のデータの状態をもとに お答えをお願いします。 まず、tb_userというテーブルが id | name | age | hobby | tokugi | insert_dt -------------------------------------------- 1 | 北野 | 31 | 0101 | 0202 | 2005/6/12 という状態で、 tb_categoryというテーブルが以下のような状態になっています。 category_no | category_cd | subcategory_cd | name -------------------------------------------- 0100 | 01 | 00 | 趣味 0101 | 01 | 01 | 映画鑑賞 0102 | 01 | 02 | スキー 0200 | 02 | 00 | 特技 0201 | 02 | 01 | 早食い 0202 | 02 | 02 | 早起き ※subcategory_cdが00のとき、大項目という扱いで subcategory_cdが00以外のとき、 category_cdが同じ範囲で、 大項目に属する小項目という扱いにしています。 このとき、 『北野、映画鑑賞、早起き』というデータを1行で取得したいのですが、 select a.name, b.name from tb_user a, tb_category b where a.hobby=b.category_no or a.tokugi=b.category_no; というsqlで良いでしょうか? 手元にSQLを実行できる環境がないもので、確認させてください。
- 締切済み
- MySQL
- Oracle:グループごとに最大日付の行を1件取得
Oracle11gで、以下のようなテーブルから、 「IDごとに、DTが最大のレコードのBUMONを1件ずつ取得」 したいです。 <テーブルTB> ID DT BUMON ------------- 1 9/1 A 1 9/2 A 1 9/3 B ★Bを取得したい 2 9/4 C 2 9/5 C ★Cを取得したい 3 9/1 D 3 9/3 E 3 9/3 E ★Eを取得したい <取得したいデータ> BUMON ------- B C E <考えたSQL> select distinct A.BUMON from (select ID, DT, max(DT) over(partition by ID) as MAXDT, BUMON from TB) A, (select ID, DT, max(DT) over(partition by ID) as MAXDT, BUMON from TB) B where A.ID = B.ID and A.DT = B.MAXDT ; 上記のような方法を考えましたが、取得できますでしょうか? 現在、SQL実行環境がない場所にいるのですが、急ぎで確認したく、 どなたかお知恵を拝借できませんでしょうか?? また、可能であれば、★のレコード全体を取得するSQLもご教授いただきたく存じます。 <★のレコード全体を取得した結果> ID DT BUMON ------------- 1 9/3 B 2 9/5 C 3 9/3 E
- 締切済み
- Oracle
- テーブル結合の条件指定について
以下のようなテーブルが3つある場合に2つのテーブルにあるポイントを合計して取得したいと思っています。 ただ、外部結合しているtable_cに条件を与えるとうまく取得できません。 table_cにcdがある場合は条件を指定し、 ない場合は条件を指定しないようにするにはどうすればいいのでしょうか。 【table_a】 id name ------------------ a1 aaa a2 bbb a3 ccc 【table_b】 b_id a_id user_id point --------------------------------- b1 a1 00001 5 b2 a1 00002 2 b3 a3 00007 10 b4 a2 00356 10 【table_c】 c_id user_id cd bonus_point ------------------------------------------------ c1 00001 cd_1 1 c2 00007 cd_2 1 c3 00356 cd_1 1 SELECT table_b.user_id as user_id , (ifnull(table_b.age_count) + ifnull(table_c.bonus_point, 0)) as total_point FROM table_a INNER JOIN table_b ON (table_b.a_id=table_a.a_id) LEFT JOIN table_c ON (table_c.user_id=table_b.user_id) WHERE table_c.cd = 'cd_1' ORDER BY total_point desc ■結果 user_id total_point ----------------------------- 00356 11 00001 6 ■求めたい結果 user_id total_point ----------------------------- 00356 11 00001 6 00002 2 よろしくお願いします。
- ベストアンサー
- MySQL
- SQLの条件抽出について
ちょっと躓いてしまったのでアドバイスが頂けたらと思います。 user_accountというテーブルと、logというテーブルがあります。 logというテーブルには各ユーザーの書き込み履歴が残されており、日付がtimestamp形式で格納されています。 ユーザー一覧に最終発言内容をくっ付けて表示したいのですがうまくいきません。 SELECT DISTINCT * FROM user_accounts LEFT JOIN (SELECT * FROM log ORDER BY update_date DESC ) aaa ON user_accounts.pkey = aaa.user_accounts_pkey; などと記述してみましたが、思うような結果になりません。 自分の理想とする結果は以下のような出力結果です。 +----+----+----+--+-----------------+----------------+-----------+ | pkey| user| pass| comment| update_date| +----+----+----+--+-----------------+----------------+-----------+ | 1 | test1| pass01|test03 written by test1| 40813| | 2 | test2| pass02|testestest | 40690| どうか、お知恵を貸してください。
- ベストアンサー
- PostgreSQL
- ACCESSですべての明細が一致するデータの抽出
以下のような、構造が同じ2つのテーブルがあります。 2012注文テーブル 会社cd 商品cd A 1 A 2 B 1 C 1 2013注文テーブル 会社cd 商品cd A 1 A 2 B 1 B 2 C 2 このとき、両方のテーブルの注文が完全に一致した会社(この例ですとA社)のみを 抽出したいのですが、うまくいきません。 select distinct a.会社cd from 2012注文 a, 2013注文 b where a.会社cd = b.会社cd and a.商品cd = b.商品cd などでは、1つだけ一致するB社も抽出されてしまいます。 すべてのレコードが一致する会社だけを抽出するには、どうすればよいのでしょうか。 よろしくお願いします。
- 締切済み
- オフィス系ソフト
- 商品カタログ「この商品を買った人は、こんな商品も買っています」について
はじめまして。 商品データベースのカタログ表示の際のSQLの質問です。 www.amazon.co.jp のサイトでは、ある商品を選択すると、「この商品を買った人は、こんな商品も買っています」と表示されます。 この内部的な処理方法を教えてください。 例えば、以下のような単純なテーブルがあるとします。 ●顧客テーブル ・顧客番号 ・顧客名 ●商品テーブル ・商品ID ・商品名 ・販売単価 ●注文テーブル ・注文番号 ・注文日時 ・顧客番号 ・小計 ●注文詳細テーブル ・注文番号 ・注文詳細番号 ・商品ID ・数量 このような設計の場合、「ある商品を買った人は、こんな商品も買っています」を実現するために ・バッチで裏で処理するのでしょうか?それとも注文のたびに処理するのでしょうか? ・どのテーブルに、保存するのでしょうか? ・どのようなSQL文になりますか?(具体的に教えてください) また、別の適切な設計方法があるのでしょうか? 困っています・・・ お手数ですがよろしくお願い致します。
- ベストアンサー
- その他(データベース)
- 注文した商品名をマスターで作るか
Access 2013 vba 今工事のための材料の注文履歴を保存するテーブルと画面を作っています。 この商品名や、単価、仕入れ値などのデータは、管理テーブルを作成してそこで管理し、そこから商品IDを選択すると、注文履歴の画面にIDだけがセットされるような作りにしようと考えています。 【注文内容の入力画面A】 ・注文日 ・受注ID ・商品ID ・注文先ID ・単価 ・数量 ・単位 【商品管理テーブル】 ・商品ID ・メーカーID ・単価 ・品番 このようにすると、商品管理のテーブルのレコードを勝手に削除されたりした場合に、大変な事になることを考えると躊躇してしまいます。 商品管理のテーブルはあくまでも参照にとどめて、その商品名や品番などは、注文履歴を保存する画面のフィールドに保存したほうが良いか、迷っています。 この点で良いアドバイスがあれば、よろしくお願いします。
- ベストアンサー
- その他(データベース)