select文で複数のデータベースのタイトルを表示する方法

このQ&Aのポイント
  • データデータベースとタイトルデータベースという二つのデータベースがあり、select文で表にする際にdata1とdata2のタイトルにTitleDBの1,2の内容を表示したい場合、正しい記述方法は『select memberNo as '会員番号', memberName as '会員名', TitleDB.Title1 as 'タイトル1', TitleDB.Title2 as 'タイトル2' from dataDB, TitleDB』です。
  • このように記述することで、data1のタイトルにTitleDBのTitle1の内容が表示され、data2のタイトルにTitleDBのTitle2の内容が表示されます。
  • 実際のselect文では、カラム名にはバッククォート(`)ではなくシングルクォート(')を使用し、データベースのテーブル名とカラム名はドット(.)で結合させます。
回答を見る
  • ベストアンサー

『select data1 as

データデータベース(DataDB) memberNo|memberName|data1|data2 タイトルデータベース(TitleDB) Title1|Title2 という二つのデータベースがあったとして これをセレクト文で表にする時に、 data1とdata2のタイトルはTitleDBの1,2の内容をタイトルにしたいと思っています。 そこで以下のように記述してみましたが、エラーがでてしまいます。 『select memberNo as '会員番号',memberName as '会員名',data1 as TitleDB.Title1 ,data2 as TitleDB.Title2 from dataDB,TitleDB』 どのように実現すればよいのでしょうか? ※『select memberNo as '会員番号',memberName as '会員名',data1 as 'データ1' ,data2 as 'データ2' from dataDB,TitleDB』 の場合エラーはでません。

  • Haule
  • お礼率52% (125/240)

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

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

#1回答者です。 何となく、やりたいことが分かりました。 TitleDBの内容をヘッダのように表示し、それ以降にDataDBの内容を表示したいということですね? UNIONを使う方法が、簡単だと思います。 (1)表定義&データ例 create table TitleDB (Title1 varchar(50), Title2 varchar(50)); create table DataDB (memberNo char(5), memberName varchar(20), data1 varchar(50), data2 varchar(50)); insert into TitleDB values('好きな食べ物','好きな飲み物'); insert into DataDB values('0001','田中','ばなな','コーラ'); insert into DataDB values('0002','鈴木','りんご','ビール'); (2)検索SQL例 select 0 as SortKey,'会員番号' as 会員番号,'会員名' as 会員名,Title1 as タイトル1,Title2 as タイトル2 from TitleDB union select 1 as SortKey,memberNo,memberName,data1,data2 from DataDB order by SortKey ; この検索により、1行目にタイトル情報、それ以降にデータが検索できます。 SortKeyというのは、タイトル→データの順序保証をするために加えています。

Haule
質問者

お礼

ありがとうございました やってみまーす!

その他の回答 (1)

回答No.1

「式 as 別名」は、列や式に別名を付けるものであって、ここに「表名.列名」は書けないし、書く意味がありません。 二つの表を結合する条件もないので、期待する検索結果は得られないと思いますよ? DataDB表とTitleDB表を関連付ける方法は、何なのでしょうか? data1列、data2列とTitle1列、Title2列には、それぞれ同じ値が入っているのですか? →そうなら、結合すること自体不要。 どのデータとどのタイトルを結合するのか、という情報が必要です。

Haule
質問者

補足

data1列、data2列はいわゆる『内容』が入っていまして Title1列、Title2列には、上記の内容に対する表題が入っています。 このデータは、自由項目という意味をもってまして、 Aさんの顧客管理データベースでは、ここに、 Title1列⇒備考 data1列⇒備考の内容 Title2⇒好きなゲーム data2⇒ドラクエ Bさんの顧客管理データベースでは、はここに Title1列⇒好きな食べ物 data1列⇒ばなな Title2⇒好きな飲み物 data2⇒コーラ AさんとBさんは別のデータベースになります。 Bさんのデータベースで表を作りたい時 ○データデータベース(DataDB) 会員番号|会員名|データ1|データ2 00001|田中|ばなな|コーラ 00002|鈴木|りんご|ビール ○タイトルデータベース(TitleDB) タイトル1|タイトル2 好きな食べ物|好きな飲み物 こういったデータベースになり、この『好きな食べ物』と『好きな飲み物』をタイトルとして使用して取得したいのです。 ※タイトルにしたい理由は  ・取得したデータをプログラムで表としてそのまま貼り付けたい。  ・並べ替えを行なうときに 「order by '好きな食べ物'」としたい というわけなのです、どうすればいいのでしょうか? データベースの作りを変えないとだめですか?

関連するQ&A

  • 複数テーブルからデータ取得について

    初めて投稿します。よろしくお願いします。 SQLを使うのが初めてなので勉強をしながら作業を行なっています。そのため説明不足などありましたらご指摘願います。 [環境]  データベース:SQLServer2003 下記SQL文より、該当データの抽出は出来たのですが、 この3つのSQL文を一つのSQL文にて該当データを取得したいのですが、なかなか解決出来ないので宜しくお願いします。 SELECT isnull(会員CD,' '), isnull(郵便番号,' '), isnull(住所,' '), isnull(番地,' '), isnull(方書,' '), FROM KAIINMST AS A WHERE 更新カウンター = (SELECT MAX(更新カウンター) FROM KAIINMST WHERE A.会員CD = 会員CD) GROUP BY 会員CD,郵便番号,住所,番地,方書 ORDER BY 会員CD SELECT isnull(会員CD,' '), isnull(送付郵便番号,' '), isnull(送付住所,' '), isnull(送付番地,' '), isnull(送付方書,' '), FROM KAIINSOF AS A WHERE 更新カウンター = (SELECT MAX(更新カウンター) FROM KAIINSOF WHERE A.会員CD = 会員CD) AND 業務CD = "20" GROUP BY 会員CD,送付郵便番号,送付住所,送付番地,送付方書 ORDER BY 会員CD SELECT isnull(会員CD,' '), isnull(代理会員CD,' '), isnull(会員区分,' ') FROM DAIRI AS A WHERE 更新カウンター = (SELECT MAX(更新カウンター) FROM DAIRI WHERE A.会員CD = 会員CD) AND 業務CD = "20" GROUP BY 会員CD,代理会員CD,会員区分 ORDER BY 会員CD KAIINMSTテーブルをLEFT JOIN で他のテーブルデータを結合して欲しいです。 KAIINMASTの会員CDに対して他テーブルの該当データが存在しない場合は、NULLを設定して下さい。 以上です。宜しくお願いします。

  • データの更新について

    csvなどのテキストファイルからデータを取り込んで会員テーブルに更新するSQLを作成したくて考えています。 csvファイル 項目1:会員コード 項目2:名称 項目3:電話番号 いいやり方ではないと思いますがうまくいった方法を以下に書きます。 (1)ワークテーブル作成(csvと同じ項目) テーブル名:ワーク会員 項目1:会員コード 項目2:名称 項目3:電話番号 (2)UPDATE文実行 update 会員 K1 set 名称 = (select K2.名称 from ワーク会員 K2 where K2.会員コード = K1.会員コード), 電話番号 = (select K3.電話番号 from ワーク会員 K3 where K3.会員コード = K1.会員コード) where K1.会員コード IN (select 会員コード from ワーク会員 ) ブサイクな方法でしょうか? 他にもっといい方法があればアドバイスお願いします。

  • select文の記述について

    select文の記述について質問させていただきます。 下記のデータベースのテーブルの先頭からnumberを条件として 2名分のデータをselect文にて抽出したいと思っております。 (numberが重複し、重複数も異なるデータとなります。) select文の記述をどのようにするか教えていただければと思っております。 よろしくお願いいたします。 データベースのテーブル +——+—————+—————+————+ | id | name | number | score | +——+—————+—————+————+ | 1 | tanaka | 358 | 98 | | 3 | tanaka | 358 | 23 | | 4 | tanaka | 358 | 45 | | 11 | yamada | 126 | 63 | | 17 | yamada | 126 | 77 | | 23 | suzuki | 274 | 36 | | 45 | suzuki | 274 | 16 | | 59 | suzuki | 274 | 89 | | 73 | suzuki | 274 | 75 | | 80 | hanako | 89 | 24 | | (以下続く) | +——+—————+—————+————+ 抽出結果 +——+—————+—————+————+ | id | name | number | score | +——+—————+—————+————+ | 1 | tanaka | 358 | 98 | | 3 | tanaka | 358 | 23 | | 4 | tanaka | 358 | 45 | | 11 | yamada | 126 | 63 | | 17 | yamada | 126 | 77 | +——+—————+—————+————+

    • ベストアンサー
    • MySQL
  • ポストグレスでfrom句の中にselect文を入れたい

    from句の中にselect文を入れたい。 つまりテーブル名の変わりにselect文にするということですが。 select * from [select * from tbl2]. as t2 なんて感じでアクセスではできるのですが ポストグレスの場合、やりかたがわかりません。 どうすればよいでしょうか?

  • Select結果をSelect

    お世話になります。 以下のSQL文のイメージでselectの結果をさらにselectしたいのですが”subquery has too many columns”というエラーを吐かれます。 Postgreに合った書き方がお分かりでしたら教えてください。 よろしくお願いします。 select * from [DB名] where [パスワード] = 'test' IN ( select * from [DB名] where [ユーザID]='1111' order by [更新日] desc limit 3) [やりたいこと] テストDBからユーザIDが1111の行を更新日をキーに降順で並べ、先頭から3行分を取り出す。 その3行からパスワードが"test"のものをselectしたい。

  • MySQLで変数やループ、上位3名を求める方法

    お世話になります。早乙女遙佳と申します。 Webサイト上から会員名や点数を入力し、 送信ボタンが押されると、 受け取ったCGI側でDBに書き込み、 今月成績の良かった方、上位3名は○○さんと○○さんと○○さんです というサイトを作りたいと思っています。 データベースは、MySQLを使って学習していますが、 教えていただけますでしょうか? scoreテーブルとして、以下のテーブルを作っています。 会員の毎月の点数と、先月からの点数の増加分を格納するテーブルです。 ID name score month increment 1 taro 100 11 0 2 jiro 200 11 0 3 taro 50 10 0 4 jiro 250 10 0 /* 今月の点数を求める */ SELECT score AS thisMonthScore FROM `score` WHERE name = 'taro' AND MONTH = '11'; /* 先月の点数を求める */ SELECT score AS prevMonthScore FROM `score` WHERE name = 'taro' AND MONTH = '10'; /* 点数の増加分を書き込む */ UPDATE `score` SET `increment`= 50 WHERE name = 'taro' and month = '11'; 質問1 上記のUPDATE文では、増分を書き込むために、 `increment`= 50 としていますが、 upScore = thisMonthScore - prevMonthScore `increment`= upScore のように書けたらと思うのですが、できないものでしょうか? 質問2 WHERE name = 'taro' の様に各会員の氏名を書いていますが、 「すべての会員についてループさせる」 様にはできないでしょうか? 擬似コードですが memberName = select name from `score`; //会員名の配列 memberCount = select count('name') as cnt from `score`; //会員数 for (i = 0; i < memberCount; i++){  thisMonthScore = SELECT score AS thisMonthScore FROM `score` WHERE name =  memberName[i] AND MONTH = '11'; //今月の点数  prevMonthScore = SELECT score AS prevMonthScore FROM `score` WHERE name = memberName[i] AND MONTH = '10'; //先月の点数  upScore = thisMonthScore - prevMonthScore; //点数の増加分  UPDATE `score` SET `increment`= upScore WHERE name = memberName[i] and month = '11'; //DBの更新 } のようなイメージです。 DBの呼び出し元であるCGIでループを書けばもちろんできるのですが、 SQL文で処理させた方が速いのかなとも思ったりもしたのですが、 通常、どのように書くものでしょうか? 毎月100件、1年で1000件、10年分で10000件くらいのレコード数になりますが、このくらいであればあまり速度などは気にせずとも良いものでしょうか? 質問3 成績の良かった方、上位3名を抽出するにはどのようなSQL文になるでしょうか? 第一位 taroさん 50点 第二位 jiroさん -50点 第三位 saburoさん -100点 のような感じです。 初歩的な質問で恐縮ですが、 どうぞ、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • GROUP BYを使ったSELECT文の総件数を求める方法

    【表A】 列1 | 列2  ----------- 山田 | A 山田 | A 田中 | A 田中 | B 田中 | C 木村 | A 木村 | A 木村 | B 上記で列1・列2をグループ化した件数を求めたいのですが、Oracleだと   SELECT COUNT(*) FROM (SELECT 列1,列2 FROM 表A GROUP BY 列1,列2) というSQL文で結果「6」が出力されますが、SQLServerではエラーとなってしまいます。 SQLServerで実現したい場合はどのように記述すればよろしいでしょうか?

  • ADO.NETのOleDbAdapterに設定するSelect文

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=1345496に関連して・・・ テーブル名:項目名 部屋:科目、部屋 教科書:科目、値段 上記のようなテーブルがあり、以下のようなSelect文によりデータを データセットに取得したいのですが、 コンパイルは通り、実行するとFillメソッドでエラーになります。 try~catchをしてエラーの内容を見てみると「FROM句の構文エラー」と出ています。 Fillメソッドの2つめのパラメータにどちらのテーブル名を入れても、 同じエラーになります。 UNION句でつないだSelect文をAdapterに設定した場合、 2つ目のパラメータは一体なんなのでしょうか。 Fillメソッドのパラメータがおかしいのでなければ、 SELECT文のどこがおかしいでしょうか。 教えてください。よろしくお願いいたします。 ---------------------------------------------------------------- Dim oleCn As OleDb.OleDbConnection = New OleDb.OleDbConnection Dim dataSet = New DataSet oleCn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;"~ Dim oDataAdapter As New OleDb.OleDbDataAdapter("SELECT 科目 FROM 部屋" & _ "UNION SELECT 科目 FROM 教科書 WHERE (値段 > 1000)", oleCn) oDataAdapter.Fill(dataSet)

  • SELECT * FROM セレクト文の解釈

    SQL文について SELECT CustomerID, CompanyName FROM Customers セレクト文なのですがセレクトは その名の通り「選ぶ」という意味で fromは「から」という意味だと思うのですが select * from は「~から選んだ」みたいな解釈で良いのでしょうか? SQL初心者です。

  • Select Distinctについて

    SQL文の質問です。フィールドがTable1に100つあるとします。 select distinct XYZ From Table1という文があるとします。 これだとXYZのフィールドしか参照していないことになると思います。 そうではなくて、他の99フィールドの値も参照(データにアクセスしたい)したいと思っています。 select distinct XYZ, * From Table1とSelect * from Table1みたいなことをやりましたがエラーが発生しました。他の99フィールドを参照する方法はあるでしょうか?