• 締切済み

二つのテーブルから一文でセレクトするには?

以下の二つのテーブルがあるとします。 在庫テーブル zaiko_table id | name | zaiko ------------------- 1 |みかん| 1 ------------------- 2 |りんご| 0 ------------------- 3 |とまと| 1 ------------------- 販売テーブル hanbai_table id | day | tenki ------------------- 1 | 3-2 | 晴れ ------------------- 2 | 3-2 | 晴れ ------------------- 1 | 3-1 | 雨 ------------------- 在庫テーブルのIDはその商品のプライマリーキーです zaikoは1なら在庫有り、2なら在庫なしとします。 販売テーブルのIDは在庫テーブルで決めた商品を表しています。 dayは売れた日付、tenkiはその日の天気です。 3月2日に売れた商品でまだ在庫のある物をセレクトしたいと思います。 該当する商品の名前とそれが売れた日の天気が知りたいのです。 これを一回のSQL文の発行で済ませたいときはどの様に書くのでしょうか?

  • MySQL
  • 回答数2
  • ありがとう数1

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>day の前にある h や name の前にある zは 2つ以上データを結合するのであればそれぞれのテーブルに おなじ名前のフィールドがある可能性は否定できません。 具体的にどちらのテーブルから参照しているかをしるために select hanbai_table.day, zaiko_table.name from zaiko_table inner join hanbai_table on zaiko_table.id=hanbai_table.id ・・・ のようにテーブル名をフィールドの前につけます。 ただテーブル名をいちいち書くとSQL文が冗長になりますので、 別名(エイリアス)をつけて管理することができます。 hanbai_tableはh、zaiko_tableはzなど自分の好きな別名をつければ だいぶ見やすくなります。 ふつうは別名をつける時にはASをつかうとわかりやすいでしょう select h.day, z.name from zaiko_table as z inner join hanbai_table as h on z.id=h.id ・・・

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

こんなのとか: select h.day, z.name, h.tenki from zaiko_table z inner join hanbai_table h on z.id=h.id where h.day='2008-3-2' and z.zaiko=1 hanbai_tableにtenkiフィールドを含めないほうがよいのでは。

dadadanda
質問者

お礼

早速のご回答ありがとうございます。 これは多分二つのテーブルを結合して セレクトしてるのでしょうが day の前にある h や name の前にある zは 何を意味しているのでしょうか? 普通の人なら調べれば分かるのでしょうが 検索能力が著しく低いのでご勘弁下さい。

dadadanda
質問者

補足

在庫は0ならなしの間違いでした。 お詫びして訂正いたします。

関連するQ&A

  • テーブルの結合について

    皆さん教えてください。 zaiko と testBと言うテーブルに商品IDカラムを入れておき この二つのテーブルを結合して商品データはあるけど 在庫がない物だけを抽出したいのですが、その場合どのような SQLになるでしょうか?? 商品データも在庫もある場合下記のSQLで商品情報と在庫データが 出てくるのですが、その逆と言うか、商品情報は登録してあるが、 在庫テーブルに登録されていない商品情報を検索したいと思っております。 select zaiko.*,product_data.* from zaiko inner join product_data on zaiko.nyuko_item_code = product.item_code ではどうかよろしくお願いします。

  • Inner Joinについて

    SQLについてお教え頂けませんでしょうか? 在庫テーブル ・ID(プライマリーキー) ・数量 データ 001,1 002,2 追加テーブル ・ID(プライマリーキーではない) ・数量 データ 001,3 001,4 002,1 002,2 上記のようなデータがあります。 Updateクエリを実行したときに、追加テーブルにある数量を、在庫テーブルにある数量に足しこみたいです。 欲しい結果は、在庫テーブルのデータが 001,8 002,5 となっていてもらいたいです。 Update 在庫テーブル Inner Join 追加テーブル On 在庫テーブル.ID = 追加テーブル.ID Set 在庫テーブル.数量 = 在庫テーブル.数量 + 追加テーブル.数量 上記のようなSQLを教えてもらったので実行したら問題なくできました。 ただし、どのようなプロセスで結果が得られたのかわかりません。 どうぞ、ご教授お願いいたします。

  • Mysql 絞り込み検索

    絞り込み検索を実装したいのですがうまくいきません。 ご教授していただければ幸いです。 データは次のとおりです。 テーブル名 「zyoho」 カラム  cityid :tenki_id :kansou 1:1:あつい 2:2:乾燥してる 1:2:乾燥してる 3:3:寒い 以上をセレクトボックスにて絞り込み 「kansou」のデータをだしたいのいです。 一つ目のセレクトボックス ・東京 :cityid 1 ・大阪:cityid 2 ・熊本:cityid 3 二つ目のセレクトボックス ・晴れ:tenki_id1 ・雨:tenki_id2 ・雪:tenki_id3 ・何も選択しなかったらすべて表示。 ・例えば東京だけ選ぶと あつい 乾燥してるの二つのデータ結果。 ・天気だけを選ぶと出てくるいくつかのデータ結果。 ・県、天気を選ぶと絞り込まれたデータ結果。 このように絞り込みたいのですがご教授いただければ幸いです。 お願いいたします。

    • ベストアンサー
    • MySQL
  • クエリを使ってテーブルを更新したいのですが

    すみません、大学でやっているプロジェクトが行き詰ってしまい、初めて書き込みをさせていただきます。 今私はaccess 2003でレストランの在庫管理システムを作ろうとしているのですがフィールド間の計算がうまくいかないので困っています。テーブルは3つあり テーブル  :商品テーブル ーーーーーーーーーーーーーーーーーーーーー フィールド :商品名(主キー)text フィールド :販売数 number ーーーーーーーーーーーーーーーーーーーーー テーブル  :グラムテーブル ーーーーーーーーーーーーーーーーーーーーー フィールド :グラムテーブルId(主キー)auto number フィールド :商品名 text フィールド :食材名 text フィールド :食材に使うグラム数 number ーーーーーーーーーーーーーーーーーーーーー テーブル  :食材テーブル ーーーーーーーーーーーーーーーーーーーーー フィールド  :食材名(主キー)text フィールド  :食材の在庫 number ーーーーーーーーーーーーーーーーーーーーー リレーションシップは商品テーブルとグラムテーブルが1対多の関係で、食材テーブルとグラムテーブルも1対多の関係です。 私の中のイメージでは使用者が商品テーブルの販売数を打ち込んで食材の在庫数が変わっていくような感じで作りたいので、とりあえず、更新クエリを使って 食材テーブル.食材の在庫:[食材の在庫]-([商品テーブル.販売数]*[グラムテーブル.食材に使うグラム数]) という式を打ち込みましたが変化はありませんでした。なにか、間違っている部分もしくは変更しなきゃならない部分があるならご教授お願いいたします。 わかりにくい文で本当にすみません。

  • 在庫管理の仕組みで質問

    例えば商品テーブルに商品IDと商品名と在庫数、仕入販売テーブルには商品ID、仕入数、販売数、返品数のテーブルを作り、商品テーブルを親フォームに、仕入販売テーブルをサブフォームにしてフォームを作成したとします。 そこで商品を登録する際に、商品名を入力して、サブフォームに仕入数を50と入力したときに、在庫数も自動的に50になる方法が知りたいのですが、 どうすればいいかわかりません・・・。 ちょうどAccess2000のサンプル在庫管理がそういう仕組みではありますが、商品テーブルに在庫数フィールドがなく、どうなっているかわかりません・・・。 どうか教えていただけますようお願い致します!

  • テーブルの正規化について

    現在一つのテーブル(ゲーム仕入れ在庫管理)に全てまとめている状態で管理がしづらく 正規化をしてみようと思いネットで調べながらやっているのですが うまくいきません・・・。 フィールドは ID(オート) JANCODE メーカー 商品名 状態(新品・中古) 商品型番 対応本体 定価 売価 仕入れ値 仕入れ先 販売本数 入荷数 残数 入荷日 という感じで一つにまとまっています。 なにかアドバイスいただけるとうれしいです。

  • アクセスの2つのテーブルから重複しないものを抜き出す方法について

    アクセスの2つのテーブルから重複しないものを抜き出す方法について 例えば テーブル Aには ID   価格    商品   1  200    りんご   2  150    みかん   3  180    りんご   4  230    いちご テーブル Bには   1  150    みかん   2  180    りんご とあった場合 A-B のクエリーを実行して   1  200    りんご   2  230    いちご という結果を得たいのですが、どのようにすれば出来るのでしょうか よろしくお願いします。

  • inner joinでサブクエリ

    SQLについてお教え頂けませんでしょうか? 在庫テーブル ・ID ・数量 データ 001,1 001,3 002,3 002,2 002,4 003,2 商品テーブル ・ID データ 001 002 003 004 やりたいこと: 在庫テーブルには重複しているIDがあります。 商品テーブルには重複しているIDはありません。 在庫テーブルの重複を削除したIDと商品テーブルのIDをinner joinで結びたいと思います。 ・select distinct ID FROM 在庫テーブル ・select ID FROM 商品テーブル この2つのjoin方法がわかりません。 結果として、 001 002 003 を取得したいいです。宜しくお願いします。 ちなみに select ID from 商品テーブル inner join 在庫テーブル 商品テーブル.ID = exists(select distinct ID from 在庫テーブル) というコードを書きましたが、動きませんでした・・・抽出データが0件でした・・・

  • FileMakerで在庫管理をしたい!

    FileMakerで在庫管理をしたい! 現在在庫管理をエクセルでやっていますが、 これからはファイルメーカーで管理したいと思いいろいろ試みています。 そこで、 商品テーブルと在庫テーブルと移動テーブルをつくりました。 ■商品テーブル 商品ID 商品名 ■在庫テーブル 在庫ID 商品ID 保管場所 棚卸在庫数 現在庫数(Calculation) 入庫日 ■移動テーブル 移動ID 在庫ID 移動数 移動先保管場所 移動日 商品テーブルと在庫テーブルは商品IDでリレーション 在庫テーブルと移動テーブルは在庫IDでリレーション 在庫の出し入れ移動が激しいので、移動入力を簡単にできたらと思います。 入庫入力は在庫テーブルに新規レコードで入力 出庫入力は移動先保管場所を"出庫"というふうにしてやろうかと考えています。 問題点 ・移動を入力する際に、保管場所と商品名で目的の在庫を絞り込みたいのですが、うまくポータルに表示されません。リレーションの組み方が間違ってる?? ・現存の在庫を他の保管場所に移動するとき、 移動先保管場所を入力すると自動的に在庫テーブルに新規レコードとして在庫が移動されるようにしたいがやりかたがわからない。 本をみても目的の情報にたどりつけないので、こちらの掲示板がたよりです。 助けてください!!

  • group byにより集計した結果での名称取得方法

    次のようなテーブルがあったとして、一回のSQLで商品名称とその売上件数の一覧を作成することは可能なのでしょうか? 【売上テーブル】 ID 販売日 商品ID 0001 2011/01/01 1 0002 2011/01/01 2 0003 2011/01/03 1 0004 2011/01/10 1 0005 2011/01/12 2 ・・・ 【商品マスタ】 ID 商品名 1 りんご 2 みかん 3 いちご 【最終的に作成したい一覧】 商品名 件数 りんご 3 みかん 2 いちご 0 ※売上テーブルに存在しない商品についても、件数が0件として一覧に出力出来るようにしたいです。 select 商品ID from 売上テーブル group by 商品ID にて商品ID毎の件数を算出し、それとは別に select ID,商品名 from 商品マスタ として、商品IDと名称のリストを取得後、アプリにてこれらの情報を突き合わせれば実現できるのは分かるのですが、これらの処理を一回のSQLにまとめることは可能なのでしょうか? よろしくお願いします。