SQLServer2005を使用して会員マスタと代理人テーブルからデータを抽出する方法

このQ&Aのポイント
  • SQLServer2005を使用して、会員マスタテーブルと代理人テーブルの関連データを抽出する方法について教えてください。
  • 会員マスタテーブルの会員CDを元に、代理人テーブルから最大のKOSHINDAYを持つ代理人CDを検索し、業務CDが15のものだけを選択します。
  • 選択された代理人CDを使用して会員マスタテーブルから代理人の住所と氏名を抽出します。1回のSQL文でこの抽出が可能かどうか教えてください。
回答を見る
  • ベストアンサー

クエリを分割せずに一つにまとめたクエリについて

以前投稿したのですが、抽出するテーブルに問題があり、 再度投稿させて頂きます。 SQLを使うのが初心者なので勉強をしながら作業を行なっています。そのため説明不足などありましたらご指摘願います。 [環境]  データベース:SQLServer2005 質問内容は、 会員マスタテーブル 会員CD,会員住所,SHIMEI,KOSHINDAY 0001,東京,太郎,20090101 0001,千葉,太郎,20090102 0002,東京,次郎,20090101 0002,大阪,次郎,20090109 0003,大阪,三郎,20090109 0003,奈良,三郎,20090110 0004,大阪,四郎,20090109 代理人テーブル 会員CD,代理人CD,業務CD,KOSHINDAY 0001,0002,15,20090101 0001,0003,15,20090102 0002,0001,01,20090201 0002,0004,10,20090202 0003,0001,10,20090201 0003,0004,15,20090202 上記のようなテーブルがあります。 抽出結果ですが、 会員CD,会員住所,SHIMEI,KOSHINDAY,代理人CD,代理人住所,代理人名... 0001,千葉,太郎,20090102,0003,奈良,三郎,20090110 0002,大阪,次郎,20090109 0003,奈良,三郎,20090110,0004,大阪,四郎,20090109 会員マスタテーブルにて、各会員のKOSHINDAYが最大のデータを抽出します。 会員マスタテーブルの会員CDを元に、代理人テーブルを検索し各々KOSHINDAYが最大の代理人CDを求め、その時に業務CD=15のものだけを選び、 選び出された代理人CDで、会員マスタテーブルを検索し、 代理人の住所・氏名を抽出します。 上記内容なのですが、一回のSQL文で抽出が可能でしょうか? 仮想的にアクセスで検証したのですが、 作成出来ませんでした、すいませんが宜しくお願いします。

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

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.5

>エイリアスをA・B・Cと付けた場合に、次のエラー表示がされるのですが、どのような対処をすれば宜しいのでしょう。 >ちなみにA・B・Cをそれぞれのテーブル名 >A=会員マスタテーブル B=代理人テーブルとした場合は、エラーになりません。 クエリの後ろのエイリアスだけ変更して、「ON」の後ろの結合条件を変更しなかったときには、そのようなメッセージが出ます。 たとえば、こんな感じに LEFT OUTER JOIN (SELECT * FROM 代理人テーブル b1 WHERE b1.KOSHINDAY IN (SELECT MAX(KOSHINDAY) FROM 代理人テーブル WHERE 会員CD=b1.会員CD)) b ON 代理人テーブル.会員CD=会員マスタテーブル.会員CD 気をつけていただきたいのは、クエリは階層になっているわけですので、最終的なSELECT文はもはやクエリの結果を返すのに 会員マスタテーブルや代理人テーブルを直接は参照しておらず、あくまでも3つのクエリの結果(a,b,c)だけを使っているという点です。 従って、結合にはa,b,cだけを使うことができます。 >会員テーブルの更新日で(MAX関数)による抽出に対しては、1会員1行になる事は、確認済みです。 私が#2で書いたクエリは、 SELECT * FROM 会員マスタテーブル a1 WHERE a1.KOSHINDAY IN (SELECT MAX(KOSHINDAY) FROM 会員マスタテーブル WHERE 会員CD=a1.会員CD) SELECT * FROM 代理人テーブル b1 WHERE b1.KOSHINDAY IN (SELECT MAX(KOSHINDAY) FROM 代理人テーブル WHERE 会員CD=b1.会員CD) この上記2つのクエリ結果が常に1会員1行になるのであれば、会員CDでの重複は絶対に発生しません。 実際の環境に合わせてどのように書き換えられたかわかりませんので、そこをチェックしていただきたいです。

X10agundam
質問者

お礼

やっと出来ました、ありがとうございました。 問題であった重複データが存在した件ですが、 3つのクエリを分割して流した所、 2つ目のクエリで代理人テーブルにてKOSHINDAYが一人の会員に対して重複してました。 理由としては、代理人を登録する際に、業務CDを複数登録出来る為に KOSHINDAYが同日で業務CDが違うレコードが一人の会員に対して複数存在しました。 その為、他の項目にて重複しないようWHERE文を追加し 3つ目のクエリで聴いている、業務CD = '15' の問い合わせを 2つ目のクエリに追加しました。 こんな感じです。 (SELECT * FROM 代理人テーブル B1 WHERE B1.KOSHINDAY IN (SELECT MAX(KOSHINDAY) FROM 代理人テーブル WHERE 会員CD = B1.会員CD) AND GYOMUCD = '15' AND 終了日 = '999999') B ON B.会員CD = A.会員CD 大変お世話になりました。 又、不明な点がありましたら宜しくお願いします。

その他の回答 (5)

回答No.6

#3回答者です。 jamshid6さんとのやり取りで解決できたとのことで、まずはよかったですね。 質問&回答の横から入るような形になりましたが、「分析関数」や「WITH句による共通表式」(SQL Serverでは、再帰クエリも可)は非常に便利な機能なので、ぜひ勉強してみてください。 また、#3で示したように、CREATE TABLE文やINSERT文を貼り付けて、アドバイスしようとする側ですぐに利用できるようにしてもらえれば、より多くの人が、より効率的にアドバイスできるので、早く適切なアドバイスが得られる可能性があります。

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.4

今回のケースで、会員番号が重複する理由はおそらく、質問者さんの会員テーブルの主キーが会員CD、更新日になっていないことによります。 つまり、更新日が最新のものを取るようにしても、1会員1行にならないということです。 (同じ日に同じ会員の情報を2回3回と更新したときにそのテーブルはどうなりますか?) SELECT * FROM 会員マスタテーブル a1 WHERE a1.KOSHINDAY IN (SELECT MAX(KOSHINDAY) FROM 会員マスタテーブル WHERE 会員CD = a1.会員CD) は、「会員マスタテーブルからそれぞれ更新日が最新のものだけを抽出した結果」を示し、本来この時点で1会員1行になっていなければだめです。 (同じことは代理人テーブルに関しても言えます) #3の方が書かれている方法は、「会員単位に更新履歴の降順に並べ替えて先頭の1行を取る」という方法です。 その方法を使えば必ず1会員1行になりますが、同じ更新日で2件以上入っていればどちらが新しいかもわかりませんよね? 更新履歴をすべてマスタが持っているのであれば、必ず最新のデータが特定できるような構造にしておかないといけません(更新順に連番を振るなど)。 その上で、理解していただくために質問にコメントしますが、 >括弧の後に記述するテーブル名は、どのような役割をするのでしょうか? 括弧の後に記述しているのは、テーブル名ではなく、エイリアス(別名)といいます。 テーブル名の後につけた場合は、そのテーブル名を示しますので、クエリ内で何度もテーブル名を書かなくてよくなります。 今回のように括弧(1つのクエリを括弧で括ったもの)の後につけると、そのクエリの結果に対する別名として使われます。 言いかえると、括弧内のクエリが返す結果をバーチャルなテーブルとみなして使うということです。 (インラインビューと呼んだりします) また、別名を使うことで、同じテーブルや同じクエリを複数回結合に使うこともできるようになります。aとcは全く同じクエリの結果を結合に使っていますが、別名をつけているので、それぞれ別物として取り扱われます。

X10agundam
質問者

補足

お忙しい中、回答を頂きありがとうございました。 自分で考えたSQLなどを提示し、不明点を具体的に示すことがルールです。←すいませんでした。以後気を付けます。 先程のご指摘の件ですが、 会員テーブルの更新日で(MAX関数)による抽出に対しては、 1会員1行になる事は、確認済みです。 苦言を言われるかもしれませんが、質問します。 エイリアスをA・B・Cと付けた場合に、次のエラー表示がされるのですが、どのような対処をすれば宜しいのでしょう。 ちなみにA・B・Cをそれぞれのテーブル名 A=会員マスタテーブル B=代理人テーブルとした場合は、エラーになりません。 メッセージ 4104、レベル 16、状態 1、行 1 マルチパート識別子 "会員マスタテーブル.会員CD" をバインドできませんでした。 以上です。宜しくお願いします。

回答No.3

まず、苦言から。 ここは、「仕様を提示して、SQLなどを作ってもらう」サイトではありません。 自分で考えたSQLなどを提示し、不明点を具体的に示すことがルールです。 SQL Server 2005とのことなので、今回のようなケースで活用できる機能が実装されています。 (1)Oracleでいう「分析関数」   特定の列値でグループ化し、最大値あるいは最小値を持つ行の全列を得たいといったことが容易になります。 (2)WITH句による共通表式   同じクエリを繰り返し使いたい場合に、ビュー表などを事前に定義したり、同じクエリを何度も書かなくてもよくなります。 1.SQL例 1.1 準備 (1)必要なら表を削除 drop table ktbl; drop table dtbl; (2)表の定義 create table ktbl (kcd char(4), kaddr varchar(10), shimei varchar(10), koshinday char(8)); create table dtbl (kcd char(4), dcd char(4), gcd char(2), koshinday char(8)); (3)テスト用のデータ insert into ktbl values('0001','東京','太郎','20090101'); insert into ktbl values('0001','千葉','太郎','20090102'); insert into ktbl values('0002','東京','次郎','20090101'); insert into ktbl values('0002','大阪','次郎','20090109'); insert into ktbl values('0003','大阪','三郎','20090109'); insert into ktbl values('0003','奈良','三郎','20090110'); insert into ktbl values('0004','大阪','四郎','20090109'); insert into dtbl values('0001','0002','15','20090101'); insert into dtbl values('0001','0003','15','20090102'); insert into dtbl values('0002','0001','01','20090201'); insert into dtbl values('0002','0004','10','20090202'); insert into dtbl values('0003','0001','10','20090201'); insert into dtbl values('0003','0004','15','20090202'); 2.検索 with kq(kcd,kaddr,shimei,koshinday) as (select kcd,kaddr,shimei,koshinday from(select *,row_number() over(partition by kcd order by koshinday desc) as rn from ktbl) as x where x.rn=1), dq(kcd,dcd,gcd,koshinday) as (select kcd,dcd,gcd,koshinday from(select *,row_number() over(partition by kcd order by koshinday desc) as rn from dtbl where gcd='15') as y where y.rn=1) select kq1.kcd as "会員CD", kq1.kaddr as "会員住所", kq1.shimei as "会員氏名", kq1.koshinday as "会員更新日", kq2.kcd as "代理人CD", kq2.kaddr as "代理人住所", kq2.shimei as "代理人氏名", kq2.koshinday as "代理人更新日" from kq as kq1 left join dq on kq1.kcd=dq.kcd left join kq as kq2 on dq.dcd=kq2.kcd order by kq1.kcd ;

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

>会員マスタテーブルの各々KOSHINDAYがMAXデータは、すべて必要です。 普通にやればそうなるので、結果を4行書いておいてくれれば、余計なことは考えなかったんですけどね。 それから、見ての通り、クエリはほとんど違いません。 (つまりほとんどすべてのポイントが含まれていたということです) 前のクエリから導けるようになるといいですね。 SELECT a.会員CD, a.会員住所, a.SHIMEI, a.KOSHINDAY, c.会員CD 代理人CD, c.会員住所 代理人住所, c.SHIMEI 代理人名, c.KOSHINDAY FROM (SELECT * FROM 会員マスタテーブル a1 WHERE a1.KOSHINDAY IN (SELECT MAX(KOSHINDAY) FROM 会員マスタテーブル WHERE 会員CD=a1.会員CD)) a LEFT OUTER JOIN (SELECT * FROM 代理人テーブル b1 WHERE b1.KOSHINDAY IN (SELECT MAX(KOSHINDAY) FROM 代理人テーブル WHERE 会員CD=b1.会員CD)) b ON b.会員CD=a.会員CD LEFT OUTER JOIN (SELECT * FROM 会員マスタテーブル c1 WHERE c1.KOSHINDAY IN (SELECT MAX(KOSHINDAY) FROM 会員マスタテーブル WHERE 会員CD=c1.会員CD)) c ON c.会員CD=b.代理人CD AND b.業務CD='15' ORDER BY 1

X10agundam
質問者

補足

回答頂いた内容で、処理してみたのですが、 会員CDが重複してしまい抽出件数が膨大になってしまいました。 そこで、確認なのですが、括弧で括られたSELECT文の後に、a b c とありますが、これは、a = 会員マスタテーブル b = 代納人テーブルだと思うのですが、 cについては、どうなるのでしょうか? 会員マスタテーブル AS c ということなのでしょうか? 正確な記述をFROM~すると FROM (SELECT * FROM 会員マスタテーブル a1 WHERE a1.KOSHINDAY IN (SELECT MAX(KOSHINDAY) FROM 会員マスタテーブル WHERE 会員CD = a1.会員CD)) 会員マスタテーブル ←括弧の後に 記述するテーブル名は、 どのような役割をするのでしょうか? LEFT OUTER JOIN (SELECT * FROM 代理人テーブル b1 WHERE b1.KOSHINDAY IN (SELECT MAX(KOSHINDAY) FROM 代理人テーブル WHERE 会員CD = b1.会員CD)) 代理人テーブル ON 代理人テーブル.会員CD = 会員マスタテーブル.会員CD LEFT OUTER JOIN (SELECT * FROM 会員マスタテーブル c1 WHERE c1.KOSHINDAY IN (SELECT MAX(KOSHINDAY) FROM 会員マスタテーブル WHERE 会員CD = c1.会員CD)) c←不明です。 ON 会員マスタテーブル.会員CD = 代理人テーブル.代理人CD AND 代理人テーブル.業務CD = '15' ORDER BY 会員マスタテーブル.会員CD 以上です。このような記述でよろしいのでしょうか? お忙しい所、申し訳ございませんがよろしくお願いします。

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

結果をみる限り、業務CDに関わらず代理人がいる会員だけが対象のようですね。 したがって、メインのテーブルは代理人テーブルとし、以下のようにつなぎます。 SELECT a.会員CD, b.会員住所, b.SHIMEI, b.KOSHINDAY, c.会員CD 代理人CD, c.会員住所 代理人住所, c.SHIMEI 代理人名, c.KOSHINDAY FROM (SELECT * FROM 代理人テーブル a1 WHERE a1.KOSHINDAY IN (SELECT MAX(KOSHINDAY) FROM 代理人テーブル WHERE 会員CD=a1.会員CD)) a LEFT OUTER JOIN (SELECT * FROM 会員マスタテーブル b1 WHERE b1.KOSHINDAY IN (SELECT MAX(KOSHINDAY) FROM 会員マスタテーブル WHERE 会員CD=b1.会員CD)) b ON b.会員CD=a.会員CD LEFT OUTER JOIN (SELECT * FROM 会員マスタテーブル c1 WHERE c1.KOSHINDAY IN (SELECT MAX(KOSHINDAY) FROM 会員マスタテーブル WHERE 会員CD=c1.会員CD)) c ON c.会員CD=a.代理人CD AND a.業務CD='15' ORDER BY 1

X10agundam
質問者

補足

素早い解答ありがとうございます。 せっかくの解答なのでが、忘れていました。 会員マスタテーブルの各々KOSHINDAYがMAXデータは、すべて必要です。 その中には、代理人テーブルに会員CDを持たない人も存在しますが 代理人が居ない会員は、代理人の住所等は、NULLでOKなのです。 すいませんが宜しくお願いします。 こんな感じです。 会員CD,会員住所,SHIMEI,KOSHINDAY,代理人CD,代理人住所,代理人名... 0001,千葉,太郎,20090102,0003,奈良,三郎,20090110 0002,大阪,次郎,20090109 0003,奈良,三郎,20090110,0004,大阪,四郎,20090109 0004,大阪,四郎,20090109

関連するQ&A

  • 岡崎次郎三郎や茶屋四郎次郎

    岡崎次郎三郎信康や茶屋四郎次郎の「次郎三郎」とか「四郎次郎」ってどういう意味ですか? ほかに有名な、例えば「太郎次郎」とか「三郎次郎」って名前が付く歴史人物はいますか? 教えて下さい。 お願いします。

  • Accessで一致データを抜いて項目をずらす方法

    Access2000を使用して、テーブル1のフィールド2~5で、テーブル2と一致したフィールドを抜いて項目をシフトさせたいのですが、どのような方法があるのでしょうか。 <元テーブル>    フィールド→ 氏名, 名1, 名2, 名3, 名4 ・テーブル1の項目 山田,花子,次郎,三郎,四郎           鈴木,五郎,六郎,七朗,和子           佐藤,和子,一郎,太郎,四郎 ・テーブル2の項目 山田,花子           鈴木,七朗           鈴木,和子          佐藤,一郎           佐藤,四郎           佐藤,和子 <変換後テーブル>テーブル1を基準として   フィールド→ 氏名, 名1, 名2, 名3, 名4           山田,次郎,三郎,四郎,null           鈴木,五郎,六郎,null,null           佐藤,太郎,null,null,null 分りずらい説明で申し訳ありませんが、宜しくお願いします。

  • エクセルVBAで複数VLOOKUP

    お世話になります エクセルが3つあるとします下記 大阪方面.xls コード|太郎|次郎|三郎|四郎| 0111|  1|   | | 1 | 0112|  |  1| | | 0113|  |  1| | | 0114|  |   | | | 京都方面.xls コード|田中|次郎|五郎|四郎| 0111|  2|   | | 2 | 0112|  |  1| | | 0113|  |  3| | 1| 0114|  1|   | | | 奈良方面.xls コード|田中|次郎|五郎|四郎| 0111|  2|   | | 2 | 0112|  |  1| | | 0113|  |  3| | 1| 0114|  1|   | | | 上記3件のエクセルをを合計させたいのですが ■問題点 *名前がランダムに入っている *名前の件数も決まっていない(セルのF20~BH20までのどれかに名前が入る)行数は1619です。 上記の内容からすべてに関数を入れるのは非常に重たくなりそう *エクセルファイルは3つとは限らない。 *エクセルファイル名が決まっていない ■やりたいこと VBAのフォームにテキストボックス(ファイル場所表示用)を設置しダイアログボックス呼び出し用ボタンを設置(10個ぐらい) 必要なxlsを指定し実行ボタンで下記のような計算をさせたいのが理想です。 合計.xls コード|太郎|次郎|三郎|四郎|田中|五郎| 0111|  1|   | | 5| 4 | | 0112|  |  4| | | | | 0113|  |  7| | 2| | | 0114|  |   | | | 2 | | Win XP オフィース2003 わかる方ご教授願います。

  • ACCESS2000のSQLについて

    ACCESS2000のSQL文について質問です。 K情報テーブル:(支店(テキスト型),所属(テキスト),氏名(テキスト),ログ(テキスト),抽出件数(数値),処理日(日付型)) 支店 所属 氏名 ログ 抽出件数 処理日 ----------------------------------------- 関東 埼玉 太郎 A   50    2009/02/25 関西 大阪 次郎 B   15    2009/04/01 関東 埼玉 太郎 A   10    2009/03/05 関西 大阪 次郎 B   5    2009/04/06 東北 青森 三郎 C   2    2000/01/02 東北 青森 三郎 A   2    2000/01/02 ・ ・ ・ ----------------------------------------- 以上のテーブル情報を、SQL文にて抽出したいのですが、抽出条件が私には難解で解決の見通しが立ちません。ご教授をお願いします。 ***条件*** [ログ] = "A" のみ抽出。 現在日から過去3ヶ月前までのデータのみ抽出。 [氏名]ごと[ログ]の総合計。 [氏名]ごとの[抽出件数]の総合計。 [ログ]の総合計の上位30件を降順で。 順位にNo.をふる。 上記の条件で抽出したデータをを下記の作業テーブルに出力したと思っております。 作業テーブル:順位,所属,氏名,ログ件数,抽出件数 宜しくお願いします。

  • エクセルで文字列を数えて一覧表にしたいのですが

    たとえばですが、2人一組で配達に行きます。 メンバーは、太郎、次郎、三郎、四郎、五郎・・・と多人数です。 A1に太郎、B1に三郎 A2に次郎、B2に五郎 A3に太郎、B3に次郎 ・ ・ ・ と、いうような表ができます。 このとき、*郎は何回配達にいったのかをカウントしたいのです。 *郎は、A、Bのどちらに登場するかわかりませんし、 何回も登場しますし、組み合わせもばらばらです。 最終的に、太郎 15回、次郎 8回、三郎 21回・・・というように分かるようにしたいので、 仮にD1に太郎、E1に次郎、F1に三郎・・・の名前 (ダブって登場する名前を一つにまとめて、登場する全ての名前を残したい)、 D2に太郎、E2次郎、F2に三郎の回数(登場した名前の回数を数字で求めたい) というようにしたいのです。 エクセルの詳しい方、よろしくお願いします。

  • 次の条件を満たすSQL文をご教示下さい。

    テーブル名: list no | first_name | last_name | comment ----+------------+-----------+--------- 1 | 太郎 | 山田 | ほげ 2 | 次郎 | 田中 | ふが 3 | 花子 | 山田 | ぴよ 4 | 三郎 | 佐藤 | ぴよ 5 | 太郎 | 山田 | ぴよ 6 | 次郎 | 田中 | ふー 7 | 三郎 | 佐藤 | ふー 8 | 花子 | 山田 | ふー 上記の表から同じ”last_name”を持つ人の”first_name”と”last_name”を重複無しで抽出する(下記のような結果)SQL文は作成可能でしょうか。 結果 first_name | last_name ------------+----------- 太郎 | 山田 花子 | 山田 宜しくお願いします。

  • 次のデータ抽出を(高速に)行うSQLを教えてくださ

    自分がフォローしている人のつぶやきと、じぶんの呟きを含めて、日付順で表示するSQLを検討しています。 MYSQLの構文がかなり複雑になってしまったために、 もっと簡単に高速にSQLで記述する方法がありましたら教えて頂けませんでしょうか。 長文になり申し訳ございませんが、アドバイスいただけると幸いです。 テーブルは以下の3種類です。 ●cutomer:登録者名を記録 <構造> id(auto increment,key),name(名前) <サンプルデータ> 0,"太郎" 1,"次郎" 2,"三郎" 3,"四郎" ●follow:誰が(my_user_id)、誰をフォローしているか(target_user_id)を記録 <構造> id(auto increment,key),my_user_id,target_user_id <サンプルデータ> 0,1,0 0,1,2 ●tweet:つぶやきを記録 <構造> id(auto increment,key),user_id,tweet_comment(つぶやき),date(つぶやき日時) <サンプルデータ> 0,1,"次郎のつぶやきです","2011-01-01 00:00:00" 1,2,"三郎のつぶやきです","2011-02-01 00:00:00" 2,0,"太郎のつぶやきです","2011-03-01 00:00:00" 3,1,"次郎のつぶやきです","2011-04-01 00:00:00" 4,3,"四郎のつぶやきです","2011-05-01 00:00:00" 上記のサンプルデータを用いて、期待する出力結果をご説明します。 例として、入力値を「次郎」とすると、 「次郎」のつぶやきと、次郎がフォローしている太郎と三郎の呟きを表示したいです。 "次郎","次郎のつぶやきです","2011-01-01 00:00:00" "三郎","三郎のつぶやきです","2011-02-01 00:00:00" "太郎","太郎のつぶやきです","2011-03-01 00:00:00" "次郎","次郎のつぶやきです","2011-04-01 00:00:00" 現状は、次郎とつぶやきselectと、次郎がフォローする太郎と三郎のつぶやきselectを unionで結合する形式なっており、もうちょっと賢くできないものかと悩んでいます。 なお、対象の次郎のuser_id(サンプルでは"1")は予めわかっているものとします。 ( select customer.name,tweet.tweet_comment,tweet.date from customer,tweet where customer.id = 1 and customer.id = tweet.user_id ) union ( select customer.name,tweet.tweet_comment,tweet.date from customer,tweet,follow where follow.my_user_id = 1 and follow.target_user_id = tweet.user_id and tweet.user_id = customer.id ) order by table_tweet.date asc

    • ベストアンサー
    • MySQL
  • 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
  • 作詞・作曲・編曲 英語で

    歌謡曲のクレジット欄によく見られる次の表現を英語に訳してください。 「作詞・山田太郎 作曲・鈴木次郎 編曲・佐藤三郎 歌・高橋四郎」

  • エクセルのことで質問です

    うまく説明ができないかもしれないのですがよろしくお願いします<(_ _)> シート1 会社名  氏名   携帯番号 ○○会社 山田太郎 090-****-**** ○○会社 佐藤次郎 090-****-**** ○○会社 田中三郎 090-****-**** ××会社 松尾四郎 090-****-**** ××会社 小泉五郎 090-****-****         ・         ・         ・ シート2 会社名  氏名   携帯番号 ××会社 松尾四郎 というデータがあって、シート2で××会社の松尾さんの携帯番号を抽出したい時は何の関数を使えば良いでしょう?