• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:サブクエリーのやり方を教えてください。)

MySQL4.1.20でのサブクエリーのやり方と複数条件のselect文の記述方法

このQ&Aのポイント
  • MySQL4.1.20でのサブクエリーのやり方と複数条件のselect文の記述方法について教えてください。
  • 案件名テーブルと作業名テーブルをもとに、作業コード1を含む案件コードとその案件コードと同じ作業コードを持っている他の案件を引き出したいです。
  • MySQL4.1.20を使用していますが、一度のselect文で要件を満たすデータを取得する方法がわかりません。

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

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

たとえばこんな感じ? SELECT A.`案件コード`,A.`案件名`,S3.`他作業コード` FROM `案件名テーブル` AS A INNER JOIN `作業名テーブル` AS S ON S.`案件コード`=A.`案件コード` AND S.`作業コード`='1' LEFT JOIN( SELECT S1.`案件コード`,S1.`作業コード`,S2.`作業コード` AS `他作業コード` FROM `作業名テーブル` AS S1 INNER JOIN `作業名テーブル` AS S2 ON S1.`案件コード`= S2.`案件コード` AND S1.`作業コード`!= S2.`作業コード` WHERE S1.`作業コード`='1' ) AS S3 ON S.`作業コード`=S3.`作業コード` AND S.`案件コード`=S3.`案件コード`

studio001
質問者

お礼

回答いただきましてありがとうございました。 自環境に置き換えて動かしてみたところ、いただきました回答は大変有効なヒントになりました。 ※結局、SQLを2度書いた方が楽なんじゃないのか!?ってつっこみが入ったので、採用はさせていただけませんでしたが。。。 また、これに懲りず質問させていただきますのでよろしくお願いいたします。

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

関連するQ&A

  • MySQLのUPDATE文でサブクエリ

    MySQLのUPDATE文でサブクエリの使い方について教えて下さい。 MySQLのUPDATE文でサブクエリを使うと「#1093 - You can't specify target table 'exam' for update in FROM clause 」というエラーになってしまいます。 「あるテーブルに対してデータを追加・更新する場合、同じテーブルをサブクエリーに使えない」 「サブクエリー内のFrom句はテンポラリテーブルとして扱うことが可能」 ということはわかりましたが、これに従いSQL文を変更してもうまくいきません。 どのようにSQL文を作ったら良いか教えていただければと思います。 環境 PHP:5.1.6 MySQL:5.0.77 ------具体的なSQL文--------------------------------------- テーブル名:sample カラム名:date(DATETIME型),name,flag 上記テーブルに対して、 1.社員(列名:nameのsuzuki)の最新出勤日(列名:date)のflagを1にする 2.社員(列名:nameのsuzuki)の最新出勤日以外(列名:date)のflagを2にする という処理をしたいと思います。 まず、SELECT文を作ってみました。 1.最新出勤日データを抽出 SELECT * FROM sample WHERE (date= (select max(date) from sample)) and name='sizili' 2.最新出勤日以外のデータを抽出 SELECT * FROM sample WHERE not (date= (SELECT max(date) FROM sample)) and name='suzuki' これをUPDATE文に変更すると、 #1093 - You can't specify target table 'exam' for update in FROM clause というエラーになります。 上記をUPDATE文に変更 1.最新出勤日データを抽出 UPDATE sample SET flag=1 WHERE (date= (select max(date) from sample)) and name='sizili' 2.最新出勤日以外のデータを抽出 UPDATE sample SET flag=2 WHERE not (date= (SELECT max(date) FROM sample)) and name='suzuki' エラー文を検索したところ下記のような情報を見つけることができました。 「仕事SPOT」 MySQLでサブクエリ(エラー#1093を回避する方法) http://wsjp.blogspot.com/2009/12/mysql1093.html 「あるテーブルに対してデータを追加・更新する場合、同じテーブルをサブクエリーに使えない」 「サブクエリー内のFrom句はテンポラリテーブルとして扱うことが可能」 と記載されています。 このページに掲載してあるように変更を加えてみました。 1.最新出勤日データを抽出 UPDATE sample SET flag=1 WHERE (date= (select max(date) as test_max from sample)) as text_tb and name='sizili' 2.最新出勤日以外のデータを抽出 UPDATE sample SET flag=2 WHERE not (date= (SELECT max(date) as test_max FROM sample)) as test_tb and name='suzuki' これでもエラーになってしまい、うまくいきません。

    • ベストアンサー
    • PHP
  • MySQLでサブクエリーが使えないため困っています

    MySQL3.23.58にて以下のSQLを実行したいのですが、 サブクエリーが利用できないため困っています。 やりたいことは、 1.memberテーブルにemailが重複したデータがあるため、 ユニークなemailを取得したい。 2.取得したemailを元にmemberテーブルを参照し、 シーケンシャルでユニークなidを取得したい。 3.その取得したidを元にflagが立っているものを取得したい。 以上になります。 実際に行いたいSQL文は以下になります。 select count(*) from member where id in ( select max(id) from member where email in ( select distinct email from M_MEMBER where email != '' and email not like '%@docomo.ne.jp' and email not like '%ezweb.ne.jp' and email not like '%ido.ne.jp' and email not like '%vodafone.ne.jp' and email not like '%@jp-%' ) ) and flag = 1; どうかよろしくお願いいたします。

  • デフォルトでデータが表示される順番

    質問があります。 oracle初心者です。 oracle8.1で insert文によってデータを登録すると 一番最後のレコードに表示されません。 select文(select * from "テーブル名")を 書いて全レコードを抽出すると、中途半端な位置に 最新レコードが表示されます。 デフォルトでテーブルのデータが表示される位置に 決まりというのはあるのでしょうか MYSQLでは最後の行に最新レコードが表示されるはずですが、 オラクルでは違うのでしょうか。 もちろん、文字コード順や数値の順番ではないみたいです。 困っていますご回答よろしくお願いします。

  • ACCESS97:VBAでテーブル作成したい

    Access97を利用しています。 VBAでテーブル作成クエリーを、SQL文で直接記述しています。 書き方としては、SELECT 列名 INTO テーブル名 IN DBのパス でいいと思うのですが、例えば会社の部門コードでループさせて、 部門の名前のついたテーブルを作成しようと思います。 さて、テーブル名やDBのパスをパラメータで渡すことは可能なのでしょうか? うまくいかないのですが、もともとムリなことをやろうとしているのでしょうか?

  • BLOB型の画像データを表示したい

    環境 OS   : WindowsXP JDK  : 1.5.0_11 Apache : 2.2.4 Tomcat : 5.5.9 eclipse: 3.3.0 struts : 1.2.7 MySQL : 5.0 DBにBlob型として格納した画像データを、 Servlet/JSPでSELECT文を実行して、結果をブラウザに表示する方法が知りたいです。 間違っていたら申し訳ないのですが imgタグからServletを呼び出しその中で処理を行うと 聞きました。 どのような記述をするのでしょうか。 またDBへの接続、SELECT文の実行は分かるのですが その後、どのようにして表示するのでしょうか。 サンプルコードなどありましたら、教えていただきたいと思います。 宜しくお願いします。

    • ベストアンサー
    • Java
  • phpの変数をmysqlへの命令文に含みたい

    mysqlへの接続等は完璧で問題なのは、phpの変数を含んだmysqlへの命令文です。 これは試行錯誤した上で間違いないと思いました。 具体的には $link = "接続の情報"  $table = "具体的なテーブル名" $result = mysql_query("select * from $table",$link) $row = mysql_fetch_array($result, mysql_assoc) としたときに print_r($row); が無反応です。 元のソースが今、手元にないので細かいところを間違えているかもしれませんが、select文で$tableを書く代わりに直接「具体的なテーブル名」と書いたらうまくいったので、phpの変数をphpからmysqlへの命令文に含む方法に問題があったと思った次第で、この方法を教えていただきたいです。 $linkまで含めて命令できるなら、その方法も教えていただきたいです。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • SQL+PHP,セレクト文、シンプルwhile文法

    SQL+PHPでサイト制作をしております データベースからセレクト文でデータを引っ張りたいのですが、当方、プログラム初心者のため稚拙な記述方法しか浮かばず困っております。どなたかお力をお貸し願えたらと存じます。 【内容】 テーブルにa1~a80までのフィールドがあり、それぞれにレコードがあります。 【例】 $sql = "SELECT * FROM テーブル名 WHERE フィールド名 LIKE '$xxx'"; $dyn = mysql_query($sql); while($row = mysql_fetch_array($dyn)){ ////この部分の記述方法 } mysql_close($cn); 単純に $a0 = $row['a0']; $a1 = $row['a1']; $a2 = $row['a2']; $a3 = $row['a3']; $a4 = $row['a4']; $a5 = $row['a5']; $a6 = $row['a6']; $a7 = $row['a7']; ・ ・ ・ として、セレクト文からwhileにて必要に合わせPHPを書いているのですが繰り返し受け取るプログラムがシンプルな記述ができません。 できましたら、フィールド数が多いので長くなりがちな記述を短くしたいと考ええています。 forやfordach、またはarrayを使ってはみたのですが、$row['axx']の部分がネックとなりうまく記述することが出来ません。 困っております。お力添え、宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • access vbaにてテンポラリーテーブルが作りたいです。

    教えてください。 フォームで年月日を入力させ ボタンを押すとテンポラリーのテーブルが出来る(そのあとでその一時テーブルを使ってselect等がしたい)ような仕組みを作りたいと思っています。 ##テーブル名 でいけるかとおもったのですが、 ##テーブル名という実際のテーブルができてしまいました。 記述は下記の通りです。 mySQL = "SELECT テーブルA.* INTO [##table] from テーブルA where 年月 = " & n1 & " " です。 ##テーブル部分を一時テーブルにしたいのですが・・・ どうしたらよいでしょうか? どうぞよろしくお願いします。

  • MySQLのselect文で、最大ID値のデータを呼び出す

    MySQLのテーブルのフィールド名として「ID」を登録しています。(型はint) そこで、select文で最大ID値のデータを呼び出すにはどうすればいいのか教えて頂けないでしょうか? select * from tableA ?????;

    • ベストアンサー
    • MySQL
  • SQLのSELECT文教えてください。

    VB5.0で、DBはSqlServer2000です。 SQL文のSELECT文で質問です。 ○A_TABLEの構成(概略) ・・・担当コード1・・・担当コード2 ○TANTO_TABLE 担当コード/担当名 (質問)TANTO_TABLEからA_TABLEの担当コード1と担当コード2の担当名を抽出したいのです。 次のSQLだと担当コード1のみしか抽出できません。 効率よく担当コード1と2の担当名を抽出するSQLを教えてください。お願いします。 SELECT 担当名 FROM A_TABLE,TANTO_TABLE WHERE A_TABLE.担当コード1 = TANTO_TABLE.担当コード