• ベストアンサー
  • 暇なときにでも

サブクエリについてお教え下さい

サブクエリについてお教え下さい リレーションの事がしっかりわかっていないでおうかがいします。 下記のようなデータがあります。 T_ANIMALとT_SIZEの間にはリレーションがありません。 テーブル名 T_ANIMAL ID,NAME 001,猫 002,犬 003,猿 テーブル名 T_SIZE SIZE_ID,SIZE A,100 B,200 C,300 下記のSQLを実行しましたが、シンタックスエラーと出ました。 Select ID,NAME, (Select SIZE from T_SIZE where SIZE_ID = 'A') from T_ANIMAL 下記のような出力希望結果を出すのは無理なのでしょうか? 出力希望結果 001,猫,100 002,犬,100 003,猿,100 リレーションが無いテーブルから情報を引っ張ってきて表示したいです。 よろしくお願いいたします。 環境はWin 7 HomeとMYSQL5.0です。

共感・応援の気持ちを伝えよう!

  • MySQL
  • 回答数2
  • 閲覧数70
  • ありがとう数2

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

  • ベストアンサー
  • 回答No.1

恐らく、Select句の中にサブクエリを 書いているから実行エラーになったのでは ないでしょうか? サブクエリをFrom句に書いて実行してみてください。 例: Select ID,NAME,SIZE from T_ANIMAL, (Select SIZE from T_SIZE where SIZE_ID = 'A') as SIZE 私の手元には、SQL実行環境がないため 上記SQLが実際に動作するかは分かりませんが、こんな感じでどうでしょう。

参考URL:
http://dev.mysql.com/doc/refman/4.1/ja/unnamed-views.html

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答ありがとうございます!試してみます!感謝感謝です!

その他の回答 (1)

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

select ID,NAME,SIZE from T_ANIMAL inner join T_SIZE on SIZE_ID = 'A' で、いけませんか?

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答ありがとうございます!

関連するQ&A

  • サブクエリに関して()

    $sql2 = 'SELECT ki,id,name,day,tday,st FROM tim WHERE (ki,name,day,st) IN (SELECT ki,name,day,max(st) FROM tim WHERE (ki,name,day) IN (SELECT ki,name,MAX(day) FROM tim where ki='.$_SESSION['ki'].' GROUP BY id) group by id)' ; IDごとにカラムday,stの最大値を出力するもです。(以前おしえていただきました) これに更にsvの最大値も条件にいれたい場合どうしたらいいでしょうか?;

    • 締切済み
    • PHP
  • サブクエリ

    サブクエリで、t2テーブルに列が無いか、t2テーブルの中でuflgの値が1である列がヒットする場合に真を返すなら、 where ... and 0=(select count(*) from t2) or 0<(select count(*) from t2 where uflg=1) のようにサブクエリに2つのselectを書かないと無理ですか?

  • サブクエリ内で INNER JOIN は

    グルーピング内で、あるカラムの最大値のレコードで絞り込む方法は、 以下のサイトで知ることができましたが。 http://www.yokablo.com/20120905717.html tb_score +-------+-------+-------+ | c_name | game | c_score | +-------+-------+-------+ | 山田 | 高飛び | 90 | +-------+-------+-------+ | 山田 | 徒競走 | 85 | +-------+-------+-------+ | 山田 | 玉入れ | 90 | +-------+-------+-------+ | 鈴木 | 徒競走 | 85 | +-------+-------+-------+ | 鈴木 | 騎馬戦 | 50 | +-------+-------+-------+ | 室伏 | 綱引き | 100 | +-------+-------+-------+ | 室伏 | 玉入れ | 10 | +-------+-------+-------+ SQL文: SELECT * FROM tb_score INNER JOIN ( SELECT c_name, MAX(c_score) AS MAXSCORE FROM tb_score GROUP BY c_name ) AS TBDUMMY1 USING (c_name) WHERE c_score = MAXSCORE 私の場合、t_score の親テーブル名`t_company`と、 子テーブル`t_items`がありまして、 以下のようなことをやりたかったのですが、エラーとなります。 上記SQL をサブクエリにします。 select * from ( SELECT * FROM tb_score INNER JOIN ( SELECT c_name, MAX( c_score ) AS MAXSCORE FROM tb_score GROUP BY c_name ) AS TBDUMMY1 USING ( c_name ) INNER JOIN t_company ON t_company.c_name = tb_score.c_name WHERE c_score = MAXSCORE ) as T1 , t_items where T1.id_score = t_items.id_score 結果エラーメッセージは、 #1060 - Duplicate column name 'c_name' でした。 エラー箇所が、 GROUP BY c_name か、 USING ( c_name ) か、 INNER JOIN t_company ON t_company.c_name = tb_score.c_name なのか、分かりません。 SQL の規則としてやってはいけないことをやっていると想像してますが、 ご指摘・ご指導いただけると大変に助かります。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 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件でした・・・

  • viewでfrom句にサブクエリが書けない

    こんにちは。MYSQLのVIEWの代替についてお教え下さい。 下記でinner joinについて教えて頂きました。 http://okwave.jp/qa/q7296711.html 環境はWin 7 MYQL5です。 t1テーブルのデータ ID,在庫 001,22 t2テーブルのデータ ID,出庫 001,17 001,3 SELECT A.z AS `在庫`,B.* FROM (SELECT SUM(stock) AS z FROM t1 WHERE id='001' GROUP BY id) A INNER JOIN t2 B ON A.id=B.id というコードで、それぞれのテーブルをグループ化してグループ化したもの同士をJOINしました。 このコードを元にVIEWを作り、そのVIEWを対象にクエリを作ろうと考えていました。 しかしながら、MYSQLのVIEWではFROM句でサブクエリは使えませんでした。 http://www.klab.jp/media/mysql/index4.html 上記のコードを書きなおして、なんとしてもVIEWで利用したいのですが、FROM句でサブクエリを使わずにVIEWを作成する方法がわかりません。 どのようにリライトすればよいか、ご助言お願い致します。

    • ベストアンサー
    • MySQL
  • in (サブクエリ) わかんない

    table hh; +------+ | id | +------+ | 1 | | 2 | | 3 | | 2 | | 1 | | 1 | +------+ select id,count(*) as cou from hh group by id having count(*) in (1,2,3); こいつはOK select id,count(*) as cou from hh group by id having count(*) in (select count(*) from hh group by id); こいつはダメ 違いはなんですか、教えて下さい

  • Mysql サブクエリの使い方

    table_A ---+------ id | count ---+------ 1 | 5 ---+------ 2 | 6 ---+------ 3 | 7 ---+------ table_B ---+----- id | sub_count ---+----- 1 | 2 ---+------ 2 | 2 ---+------ 3 | 5 ---+------ 1 | 3 ---+------ 2 | 4 ---+------ このようなテーブルで table_Aのcountと、table_Bのidでまとめたsub_countの合計が 一致しないidだけを抽出するために、 SELECT table_A.id FROM (SELECT sum(table_B.sub_count) FROM table_B GROUP BY table_B.id) AS B, table_A, table_B WHERE table_A.id = table_B.id AND table_A.count != sum(table_B.sub_cout) と書いてみましたが、うまくいきません。 ERROR 1111 (HY000): Invalid use of group function 何が悪いのでしょうか? mysqlも投稿も初心者です。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • サブクエリの使い方

    Table t1には t1code|t1type ------------------ 花子|1 太郎|1 一郎|2 次郎|2 五郎|2 Table t2には t2code|date ----------------- 太郎|2012-05-30 太郎|2012-05-30 花子|2012-05-10 花子|2012-05-10 次郎|2012-03-20 五郎|2012-04-10 一郎|2012-03-01 と登録されている場合に t1type毎に一番新しいdateをもつt2codeを抽出したいのです。 そこで、 select t2code,max(date) from t1 inner join t2 on t1code = t2code where (t2code,date) in (select t2code,max(date) as d from t2 group by t2code) group by t1type としたところ、 +--------+------------+ | t2code | max(date) | +--------+------------+ | 太郎 | 2012-05-30 | | 次郎 | 2012-04-10 | +--------+------------+ となります。 本来は、次郎→五郎になってほしいのですが、 どこが悪いのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • サブクエリの複数項目

    いつもお世話になっております。 サブクエリで複数項目を取得する方法をご教授下さい。 [既存] select 商品, 価格, (select user_id from user_master where user_id = 1 ) from products where 商品ID = 1 上記のようなSQLがあり、 user_masterから取得する項目をもうひとつ追加したいと思っています。(user_name) select 商品, 価格, (select user_id, user_name from user_master where user_id = 1 ) as user from products where 商品ID = 1 と修正したいのですが、当然エラーになってしまいます。 この場合は別にサブクエリを指定して取得した方がいいのでしょうか。 宜しくお願い致します。

  • サブクエリを使わずに実現したのですが。。。

    現在、Mysql 4.0xを利用してDBを構築しています。 しかしながら、サブクエリが使えないため以下のようなクエリが実現できず困っております。 EX: select mg.*,sumlg.* from mg left join (select id,uid from lg where uid = '00001') as sumlg on mg.id = sumlg.id where sumlg.id is null; 上記SQLは特定のユーザーIDの、テーブルBに存在しないテーブルAのIDをユーザー単位で切り分け抽出するSQL文です。 (テーブルBにはIDとUIDでユニークになるレコードが格納されています。) 上記を実現するためのSQLをどなたかアドバイスください。 どうぞよろしくお願いします。

    • ベストアンサー
    • MySQL