• ベストアンサー

別のテーブルから数値を取得したい

リレーションか、結合どちらになるかわからないのですが、 たとえば例をあげると syohin:【商品リスト】と【荷物の大きさ】 souryou:【荷物の大きさ】と【送料】 というテーブルがあるとします。 syohin type ----------- 001 A 002 B 003 C type souryou -------------- A 500 B 1000 C 1500 SQL文で、syohinとsouryouを出力したいのですが、 (例:商品002のみ「商品名」と「送料」を出したい) syohin souryou ---------------- 002 1000 のですが、どのようなSQL文になるのでしょうか? これがリレーションであるならば、テーブルの作成時や、フィールドの作成時に何かしらのオプション設定が必要なのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

select a.syohin, b.souryou from syohin a, souryou b where a.type = b.type and a.syohin = '002' でどうでしょう。

apricot777
質問者

補足

テーブル名を[a]=[syohin], [b]=[souryou]と考えました。テーブルは#1の補足の通りです。 mysql> select syohin.syohin, souryou.souryou from syohin syohin, souryou souryou where syohin.type = souryou.type and syohin.syohin = '002'; +--------+---------+ | syohin | souryou | +--------+---------+ | 002 | 1000 | +--------+---------+ 1 row in set (0.00 sec) 希望通りの結果が出ました、ありがとうございます。これだけでも「複雑になったなぁ」と躊躇してしまいましたが、もっと複雑怪奇なSQL文を使ってこそ、柔軟な検索ができるんでしょうね。 from syohin syohin, souryou souryou を from syohin, souryou に変えても同じ結果が出たのですが、上の2つはどう違うのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • sakuhat
  • ベストアンサー率61% (11/18)
回答No.3

>from syohin syohin, souryou souryou を >from syohin, souryou に変えても同じ結果が出たのですが、上の2つはどう違うのでしょうか? SQLにasというコマンドがあります。 これは列名やテーブル名に別名をつけるものです。 たとえばchonagaitableとchonagaitable2というテーブルがあるとします。 通常は select chonagaitable.A, chonagaitable.C, chonagaitable.D, chonagaitable2.Z from chonagaitable,chonagaitable2 などとしますがこれだと長いテーブル名を いちいち書かなくてはなりません。 asで別名をつけてやると select cho.A, cho.C, cho.D, cho2.Z from chonagaitable as cho, chonagaitable2 as cho2 と短くできます。 MySQLの場合asは省略できます。 つまり from syohin syohin, souryou souryou は from syohin as syohin, souryou as souryou と同じです。 しかし、これだと同じ名前をつけているので asの意味がないですね。 だからfrom syohin, souryouだけでOKです。 上の例の場合2つのテーブルに同じ列名が無い なら「chonagaitable.」「cho.」などテーブル名は省略して select A, C, D, Z from chonagaitable,chonagaitable2 と書いても大丈夫です。 同じ列名がある場合はテーブル名を指定する必要があります。 その場合、asを使って列名にも別名をつけると便利です。 select cho.A as A1, cho2.A as A2, cho.C, cho.D, cho2.Z from chonagaitable as cho, chonagaitable2 as cho2 とすることでcho.AはA1という列名で cho2.AはA2という列名で表示されます。 こちらのasも省略できます。

apricot777
質問者

お礼

とても詳しいご説明感謝します。わかりやすくて納得することができました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

質問内容の結果を求めるには、 select syohin,souryou from syohin A,souryou B where A.type = B.souryou and A.type = B だと思います。

apricot777
質問者

補足

mysql> select * from syohin; +--------+------+ | syohin | type | +--------+------+ | 001 | A | | 002 | B | | 003 | C | +--------+------+ 3 rows in set (0.00 sec) mysql> select * from souryou; +------+---------+ | type | souryou | +------+---------+ | A | 500 | | B | 1000 | | C | 1500 | +------+---------+ 3 rows in set (0.00 sec) mysql> select syohin,souryou from syohin A, souryou B where A.type = B.souryou and A.t ype = 'B'; Empty set (0.00 sec) という結果になってしまいました。 mysql> select syohin,souryou from syohin A, souryou B; +--------+---------+ | syohin | souryou | +--------+---------+ | 001 | 500 | | 002 | 500 | | 003 | 500 | | 001 | 1000 | | 002 | 1000 | | 003 | 1000 | | 001 | 1500 | | 002 | 1500 | | 003 | 1500 | +--------+---------+ ここまでは、#2の方と書式は違うけれど、同じ結果が出ていますので、where句以降を修正すれば希望通りの結果が出ると思います。ヒントをいただきましてありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Aテーブルの条件でBテーブルから抜き出し

    すみません。大変困っています。 SQL文で Aテーブル、Bテーブルがありまして、 A.id = B.idがリレーションしています。 Aテーブルから、Bテーブルのidが無いデータだけを 取り出したいのですが、どういった例が考えられますでしょうか?よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 商品テーブルと2つの在庫テーブルの結合ができない

    商品のデータベースがあるんですが、一つの商品テーブルに複数の店舗の商品をまとめて登録しています。在庫数は店舗別のテーブルで分けているのですが、これをSQLで商品コードで結合ができません。 仮に商品がA、B、Cと登録されていたとして、店舗1にはAとBの商品があるため2つの在庫数を設定しており、店舗2にはBとCの商品があるため2つの在庫数を設定しています。 つまり片方のみの商品もあれば両方に存在する商品があります。 このときにSQLで商品情報を取得する場合に、結合したいのですが結果が0件となり上手く結合ができません。 商品コードがBのときにSELECT文で両店舗の在庫数を同時に取得したいし、AやCではそれぞれの店舗在庫を取得したいのですが、何か良い方法はないものでしょうか?

    • ベストアンサー
    • MySQL
  • 別テーブルの抽出方法について

    初心者質問で恐縮なのですが、 テーブルAを正規化してテーブルBを作成したとします。 さらにテーブルBを正規化し、テーブルCを作成します。 そこで、そのテーブルA、B、Cからあるレコード1つ抽出するにはどのようなSQL文を書けば抽出できますでしょうか。 また、テーブルに外部キー制約などを用いてリレーショナル関係を築いた場合、そのメリットは更新、削除等で他のレコードと間違えないことであるということの他になにかありますでしょうか? ご存知の方、宜しくお願いします。

  • 複数テーブルを結合するには?

    OS:WINDOWSXP SP2 ORACLE:Oracle9i Enterprise Edition Release 9.2.0.1.0 A, B, Cというテーブルがあるとします。 それぞれのテーブルには XXカラムと YYカラムがあるとします。 2つのテーブルを結合させるには、以下のSQL文を記述すれば良いと考えています。 SELECT A.*,B.* FROM A JOIN B ON A.XX = B.XX 3つのテーブルを結合するには、以下のSQL文を記述しています。 SELECT A.*,B.*,C.* FROM A JOIN B ON A.XX = B.XX JOIN C ON A.XX = C.XX 但し、この記述方法でいきますと、Cテーブルを右側外部結合に指定した場合のみ、 ORA-00904 "C" 無効な識別子です。 というエラーメッセージが表示されます。 SELECT A.*,B.*,C.* FROM A JOIN B ON A.XX = B.XX RIGHT OUTER JOIN C (←LEFT OUTER、FULL OUTER)なら通ります) ON A.XX = C.XX 何故、右側外部結合のみ不正となるのか不明であり、解決策が見つかりません。 複数のテーブルを結合する為のSQL文の記述方法を教えて頂けますでしょうか?

  • 他のDBのテーブルと内部結合が可能でしょうか

    他のDBのテーブルと内部結合が可能でしょうか sql sever 2005 を使用します。このたび、データベースAのテーブルaを定期的に検索するsqlを作成することになりました。このsql文は、ストアードプロシージャとして登録予定です。 その際、テーブルbを内部結合で参照します。例として、テーブルaは社員番号があり、テーブルbは社員番号、社員名があります。(テーブルbは社員マスター) テーブルaを参照し、その社員名を内部結合(INNER JOIN)で取り出します。 ここで、テーブルa,bが共に、同じデータベース内にある場合は、問題ないのですが、 テーブルbは、別のマシンのsql sever 上にあります。(したがって、データベース名も異なります) このような状態で、内部結合による参照は可能でしょうか? また、内部結合ができないまでも、ストアードプロシージャで、データベースAのテーブルaを参照しながら、別のマシンのデータベースBのテーブルbを参照することは、原理的に可能でしょうか。 なお、データベースは共にsql server 2005を使用します。

  • テーブルとテーブルを結合したい

    同じフィールドを持つテーブル同士のデータを結合して、別のテーブル又はクエリに表示させたいのですが、こんなことできますか?できるとすればどうすればよいのですか? 例:テーブルAの商品フィールドのデータとテーブルBの商品フィールドのデータを一つにまとめてテーブルC又はクエリCに表示させたい。

  • MySQL複数テーブルからの情報取得に関しまして

    Aテーブル...ユーザ情報 Bテーブル...商品情報(AテーブルのユーザIDを列として持っています) Cテーブル...アイテム情報(Bテーブルの商品IDを列として持っています) Bテーブルの一覧リスト表示の画面にて、検索項目として、 Aテーブルのユーザ名、Cテーブルのアイテム名があります。 現在は、LEFT JOINを使って、検索、呼び出しを行っておりますが、 多数のカラムを指定して呼び出しを行っているため、SQL文が長くなってしまっており、 もっとすっきりとしたSQL文を記述したいと考えております。 ※Aテーブル,Bテーブルの組み合わせは他の画面でもよく使われております。 viewという機能を使うことによって、これをすっきりと記述できるようになるのではないかと考えておりますが、viewはこのような使い方をしてもいいのでしょうか。 または、もっとすっきりとした記述を行う技術のアドバイスをお願いいたします。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • SELECT/別テーブルのレコード数も取得したい

    ■環境 ・MySQL ■前提 ・テーブルA … idカラム ・テーブルB … A_idカラム ■やりたいこと ・テーブルAデータを取得する際、テーブルAレコードに応じて、テーブルB「A_idカラム」の数(レコード数)も取得したい ■取得イメージ例 ・テーブルA「全カラム」、「count」カラム ※「count」カラム … テーブルBにある「A_idカラム」の数 ■知りたいこと ・どこにも存在しないこの「count」カラムはどうやって作成したら良いでしょうか? ・全体のSQL文

    • ベストアンサー
    • MySQL
  • 2つのテーブルAとBをマージして新しいテーブルCを作成したいのです。

    2つのテーブルAとBをマージして新しいテーブルCを作成したいのです。マージするときは、最新の売上日フィールドをもつレコードを取得します。環境はAccess2000です。どんなSQL文を作成すればいいのでしょうか?  また、テーブルAにしかないレコード、又はテーブルBにしかないレコードは、そのままテーブルCに追加したいです。 ※下記テーブルAとBは、Access内に存在します。テーブルCはAとBのマージ後の結果作成されるテーブルです。 テーブルA 顧客番号   売上日   商品名   備考    1  2000-01-01  ふでばこ   A    2  2000-02-02  鉛筆     A    3  2000-03-03  定規     A    4  2000-04-04  シャーペン  A   99  2000-09-09  パソコン   A テーブルB 顧客番号   売上日   商品名   備考    4  2001-04-04  シャーペン  B    2  2000-02-02  鉛筆     B    3  2001-03-03  定規     B    1  1999-01-01  ふでばこ   B  100  2005-11-11  ワープロ   B テーブルAとBを、最新の売上日の条件でレコードを取得し新しいテーブルCを作成する。 テーブルC 顧客番号   売上日   商品名   備考    1  2000-01-01  ふでばこ   A    2  2000-02-02  鉛筆     A    3  2001-03-03  定規     B    4  2000-04-04  シャーペン  A   99  2000-09-09  パソコン   A  100  2005-11-11  ワープロ   B SQL文で処理可能なのでしょうか?

  • 【SQL文】このような結合UNION?できますか?

    SQL文でテーブルを結合し、insertしたいと思っています。 例) テーブル名:tb1, カラム:A1,A2 テーブル名:tb2, カラム:B1(b1,b2,b3,,,,) テーブル名:tb3, カラム:C1(c1,c2,,,,,,) tb2とtb3を結合させてtb1へinsertしたいと思いますが、 tb2とtb3リレーションを組める要素がありませんし、データの型も違います。 |A1 | A2 __|____|_____ 1 |b1 |c1 _____________ 2 |b1 |c2 _____________ 3 |b2 |c1 _____________ 4 |b2 |c2 _____________ 上記のような結果を作ってtb1へINSERTしたいのですが、UNION結合を使えるのか どうかすらわかりません。ネットで調べたのですが、突破孔を見つけることができ ませんでした。 ちなみにACCESSで結合までの結果を得るのに、SELECT B1.tb2,C1.tb3 from tb2,tb3 という文で出せましたが,mySQLではダメでした。 どなたかご教授おねがいできますでしょうか?

    • ベストアンサー
    • MySQL