• 締切済み

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
  • 回答数1
  • ありがとう数1

みんなの回答

回答No.1

この場合、同じテーブルを2度定義する必要があると思います。 select a.name,b.name,c.name from tb_user as a,tb_category as b,tb_category as c where a.hobby=b.category_no and a.tokugi=c.category_no; 実際に実行してないので検証はしてませんが・・・。

関連するQ&A

  • SQL文について教えてください。

    お世話になります。 テーブルを3つ作りました ユーザーテーブル:USER_MS USE_NO USER_NAME 001   太郎 002   次郎 003   三郎 品名テーブル:HINMEI_MS HINMEI_NO HINMEI_NAME 001    りんご 002    みかん 003    イチゴ 嫌いなものテーブル:KIRAI_TR KIRAI_NO USER_NO HINMEI_NO 001001  001   001 002003  002   003 002001  002   001 ※KIRAI_NO=USER_NO.HINMEI_NO と連結してプライマリーキーにした ここで、次郎の嫌いなものを抽出するときには $USER_NO = '002'; $SQL ="SELECT * FROM KITAI_TR A,HINMEI_MS B WHERE A.USER_NO = '$USER_NO'; で抽出できるのですが、 次郎の嫌いでない002みかんだけを抽出するSQL文がわからず苦慮しています。 以前、オラクルでSQLを使ったことがあったのですが、その時はFROM句の後に(SELECT * FORM・・・・) Bなどと書くと通ったのですがMYSQLでは通りませんでした。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Oracle[10g]のSQL文について

    ごぶさたしております。Oracle[10g]のSQL文についての 質問です。(No.???) [A]テーブルに [CODE](KEY) [CODE2] [NAME] のフィールドがあります。 A-1 B-1 NAME-1 A-2 B-2 NAME-2 A-3 B-3 NAME-3 [B]テーブルに [CODE2](KEY) [NAME-B] のフィールドがあります。 B-1 NAME-B-1 B-2 NAME-B-2 B-3 NAME-B-3 [C1]テーブルに [NO](KEY) [LINE](KEY) [CODE] のフィールドがあります。 X 1 A-1 Y 1 A-2 [C2]テーブルに [NO](KEY) [LINE](KEY) [LINE2](KEY) [BIKO] のフィールドがあります。 X 1 1 BIKO-1 X 1 2 BIKO-2 Y 1 1 BIKO-3 結果が [NO/LINE/LIN2/NAME-B/BIKO] X 1 1 NAME-B-1 BIKO-1 X 1 2 NAME-B-1 BIKO-2 Y 1 1 NAME-B-2 BIKO-3 と、なる様にしたいのです。問題は、[B]テーブルです。 今まで、教えていただいた事を参考に頑張ってみましたが、 思う結果がでません。宜しくお願い致します。

  • Oracle[10g]のSQL文について(改めて)

    すみません。[B]テーブルの作成がおかしい様でしたので、 改めて質問させて下さい。 Oracle[10g]のSQL文についての質問です。(No.???) [A]テーブルに [CODE](KEY) [CODE2] [NAME] のフィールドがあります。 A-1 B-1 NAME-1 A-2 B-2 NAME-2 A-3 B-3 NAME-3 [B]テーブルに [CODE3](KEY) [NAMEB] のフィールドがあります。 B-1 NAME-B-1 B-2 NAME-B-2 [C1]テーブルに [NO](KEY) [LINE](KEY) [CODE] のフィールドがあります。 X 1 A-1 X 2 A-3 Y 1 A-2 結果が [NO/LINE/CODE/NAMEB] X 1 A-1 NAME-B-1 X 2 A-3 (NULL) と、なる様にしたいのです。 SELECT C1.NO, C1.LINE,C1.CODE, Tx.NAMEB FROM C1 , ( SELECT C1.CODE, TNMx1.NAMEB FROM C1, ( SELECT CODE, CODE2, CODE3, NAMEB FROM A, B WHERE A.CODE2 = B.CODE3 ) TNMx1 WHERE C1.NO = 'X' AND C1.CODE = TNMx1.CODE(+) ) Tx WHERE C1.NO = 'X' GROUP BY C1.NO, C1.LINE,C1.CODE, Tx.NAMEB と、考えたのですが、何故か結果が X 1 A-1 (NULL) X 1 A-1 NAME-B-1 X 2 A-3 (NULL) X 2 A-3 NAME-B-1 4行もでてしまいます。 問題は、[B]テーブルです。 宜しくお願い致します。

  • Oracl の SQL文について

    Oracl の SQL文について、教えて下さい。 [A]テーブルに [CODE] と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [B]テーブルに [CODE] と [DATE] と [MONEY] フィールドがあるとします。 内容は、 A-1 2005/01/01 100 A-1 2005/01/02 200 A-2 2005/01/01 300 A-2 2005/01/10 400 A-2 2005/12/10 500 と、します。 [DATE]の条件を、2005/01/01~2005/01/31とし、結果を A-1 NAME-1 300 A-2 NAME-2 700 と、なる様にする為には、どういうSQL文を書けば良いのでしょうか ? よろしくお願い致します。

  • SQL 条件付きDELETE文について

    SQLを見よう見まねでいじることになりました。。 AテーブルからBテーブルの以下の条件が当てはまるデータを削除する SQLを作りたいと考えています。  (1)Bテーブルの『DAT_FLG』が1  (2)A.テーブル『KNR_NO』 と Bテーブル『KNR_NO』が同じ  (3)Aテーブル『STR_YMD』 と Bテーブル『STR_YMD』が同じ  (4)Aテーブル『END_YMD』 と Bテーブル『END_YMD』が同じ 以下のようなSQLを考えましたがエラーとなってしまいました。 DELETE FROM A JOIN B ON A.KNR_NO = B.KNR_NO and A.STR_YMD = B.STR_YMD and A.END_YMD = B.END_YMD B.DAT_FLG = '1' DBはoracleを使っています。 どなたか教えてください。

  • Oracl[10g]の SQL文について(No.6)

    何度も恐縮です。前回の質問(例題)が間違えていました。 本当に申し訳ございません。改めて、お願いしたい次第です。 Oracl[10g]の SQL文について、教えて下さい。 [C1]テーブルに [CODE](key) と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [B]テーブルに [CODE](key) と [NOUKI](key) と [KIN] フィールドがあるとします。 内容は、 A-1 2005/01/01 100 A-1 2005/01/02 200 A-2 2005/01/01 300 A-2 2005/01/10 400 A-2 2005/12/10 500 と、します。 [C2]テーブルに [CODE2](key) と [NAME2] と [CODE] フィールドがあるとします。 内容は、 AAA NAME2-1 A-1 BBB NAME2-2 A-2 CCC NAME2-3 A-3 と、します。 [C3]テーブルに [CODE2](key) と [NO](key) と [KIN2] フィールドがあるとします。 内容は、 AAA 1 200 AAA 2 300 BBB 1 10 BBB 2 20 BBB 3 30 と、します。 結果が、 A-1 NAME-1 300[B]テーブルの合計 500[C3]テーブルの合計 A-2 NAME-2 1200[B]テーブルの合計 60[C3]テーブルの合計 と、なる様にする為には、どういうSQL文を書けば良いのでしょうか ? 前回、教えて頂いた例を参考に頑張っているのですが、 まだ、私には難しすぎる様です。 よろしくお願い致します。

  • SQL文の書き方

    以下の様なテーブルがあったとして name ┌────┬───┐ │NAME_CD │ NAME │ ├────┼───┤ │1     │ hoge1│ ├────┼───┤ │2     │ hoge2│ ├────┼───┤ │3     │ hoge3│ └────┴───┘ id ┌───┬──┐ │ID_CD │ ID │ ├───┼──┤ │1    │ a1 │ ├───┼──┤ │2    │ b2 │ ├───┼──┤ │3    │ c3 │ └───┴──┘ 結果として ┌─┬───┐ │ID│ NAME │ ├─┼───┤ │a1│ hoge1│ ├─┼───┤ │b2│ hoge2│ ├─┼───┤ │c3│ hoge3│ └─┴───┘ のようにするにはどうしたらよいのでしょうか?

    • ベストアンサー
    • MySQL
  • 他テーブルで一致する列から名称を取得したい(SQL文)

    SQL文の作成方法が分からず困っています。 以下の実現はどのように行えばよろしいでしょうか? --------------------- テーブルA:(項目)キー番号、項目No テーブルB:(項目)キー番号、項目No1、項目No1名称、 項目No2、項目No2名称、項目No3、項目No3名称 --------------------- とします。 ここで、テーブルA、Bでキー番号が一致し、 テーブルAの項目Noで、テーブルBの項目No1~3のどれかと 一致した場合、項目名称をテーブルBより取ってきたいです。 出力する時、項目No、項目名称は1個のみ出力したいです。 項目No1~3にない場合も名称空白でそのまま出力します。 (データ例) テーブルA: 100,1 100,4 110,5 テーブルB: 100,1,項目名1,2,項目名2,3,項目名3 110,3,項目名3,4,項目名4,5,項目名5 結果: 100,1,項目名1 100,4,(空白) 110,5,項目名5

  • 【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
  • SQL2008 クエリ文について

    いつも皆様に助けていただいてます。 過去に色々聞いているものの、なかなか応用が利かず・・・今回もご支援下さい。 SQL2008に、1つのDBを作っていて、その中にテーブルAとテーブルBがあります。 テーブルAには、1つの会員Noにつき3つのSEQ1~3の行があって、それぞれにポイント数が入ってます。 テーブルA 会員No  SEQ   Point 1001     1     20 1001     2     30 1001     3     50 1002     1     15 1002     2     10 1002     3      0  テーブルBには、1つの会員につき最大10個のSEQが付きますが、今は殆どカラッポです。 テーブルB 会員No  SEQ  Rank 1001    1    5 1002    1    5 やりたいことは、テーブルAのSEQ1のポイント数が99以外なら、テーブルBに テーブルAの「会員NO」、SEQ「7」、Rank「1」 の行を挿入したいです。 クエリ実行後のテーブルB 会員No  SEQ  Rank 1001    1    5 1001    7    1 1002    1    5 1002    7    1 テーブルAのSEQ1のPointが99以外なら、テーブルBに「会員No」とSEQ「7」 とRank「1」を挿入、という概要です。 クエリで可能でしょうか? 先ずは自力である程度やってみるのが筋なんでしょうが、時間が無いので聞いてしまいます。 何卒よろしくお願いします。