• ベストアンサー

複数のテーブルをまとめる方法

宜しくお願い致します。 2種のテーブルをくっつけて検索結果に反映させたいと思っております。しかし、双方でリレーションしているカラムが無いのですが、やはり結合する事は無理でしょうか? 具体的には・・・ Aテーブル:カラム内容 Aid,title,subtitle,text Bテーブル:カラム内容 Bid,title,subtitle,text ※それぞれのカラム名は同じですが、使用目的が本来全く違う為、どのカラムもリレーションしてません。 このA,Bのテーブルで、本来Aだけを抽出するページがあり、その中に、Bのテーブルからも一部反映させたいのです。Bテーブルに書き込むフォーム上で、例えば『Aテーブルに反映』という様な項目を付けて、そこをチェックしたレコードは、A,B両方のページで同じ内容が見れるといったシステムを作りたいのです。やっぱり無理でしょうか??

  • nikuq
  • お礼率75% (477/631)
  • MySQL
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • mendokusa
  • ベストアンサー率13% (359/2726)
回答No.1

残念ですが無理でしょう。 作り直してください。

nikuq
質問者

お礼

ありがとうございますm(__)m やはり無理ですか・・・(>_<) 早速作り直しております。 結局、A,Bのテーブルを一枚にまとめちゃいました。 チェック項目で『Aに反映』みたいな項目を入れて、そのカラムを検索時にチェックさせるようにしました。。 ありがとうございましたーm(__)m

その他の回答 (1)

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

無理でしょう。 ひとつの抽出で二つの指定ができれば可能かも知れませんが、まったく無理そうな条件なので、テーブルを作り直したほうが早いと思われます。

nikuq
質問者

お礼

ありがとうございますm(__)m 一つの抽出でテーブルの結合をせずに連動して検索かけられれば楽なんですが・・・ それではリレーショナルにならないですね(-_-;) ありがとうございましたm(__)m

関連するQ&A

  • 効率の良い検索方法が分かりません。

    タイトルではうまく説明できなかったのですが、やりたいことは以下のようなことです。 まず、以下のような構成のテーブルが3つあります。 ■table1 aid, a_title 1 , あああ 2 , いいい 3 , ううう 4 , えええ ■table2 bid, b_title 1 , xxxx 2 , yyyy 3 , zzzz ■table3 (table1と、table2の組み合わせ) aid, bid 1 , 1 1 , 2 2 , 2 2 , 3 3 , 2 3 , 3 4 , 1 そして、ここから、 table1の、aid=1 のデータと、aid=1が持つ、table2の、bid=1,2 といったデータを調べたり、 table2の、bid=2 のデータと、bid=2が持つ、table1の、aid=1,2,3 といったデータを調べたいと思ってます。 これを、MySQL内で効率よく調べる方法が分かりません。 PHPとMySQLでシステムを組んでいるのですが、一度MySQL側で、 SELECT * FROM `table1` として、それをPHP側のforループで、各aid毎に、 SELECT * FROM `table2`,`table3` WHERE table2.bid = table3.bid AND table3.aid = $aid 等とするしかないでしょうか? あとは、テーブルを3つ使わずに、table1に、bid_list のような列を作って、そこに、"1,2"等というふうに、どのbidと関係するのかをコンマ区切りでのストリングで書いておいて、PHP側で配列にするというのも考えたのですが、この方法だと、bid=xxx を含む、table1のデータを引き出すのが困難になりそうなので、辞めようと思っています。 MySQLのバージョンは、3.23です。

    • ベストアンサー
    • MySQL
  • MysqlのONLY_FULL_GROUP_BY

    MySQLの5.7.9でONLY_FULL_GROUP_BYを有効にしています。 3つのテーブル(a, b, m) を結合して以下のようにgroup byした際、with rollupを付けるとエラーになります。rollup なしでは通ります。これは正しい挙動でしょうか。 select a.aid, a.name, b.bid, sum(m.value) from a inner join b on a.aid = b.aid inner join m on m.bid = b.bid group by a.aid, b.bid a.aid, b.bid はいずれもprimary keyです。 with rollup時のエラーは"SELECT list is not in GROUP BY clause and contains nonaggregated column a.name functionally dependent on columns in GROUP BY clause"という内容ですが、a.nameはテーブルの定義上a.idによって一意に決まる値です。

  • ACCESSでコントロールできますか?

    相変わらず、アクセス初心者の者です。 Accessで、以下のテーブルが三つ用意されています。 テーブル1 Aid A名称 テーブル2 Bid Aid B名称 テーブル3 Bid C名 Cid ここで、同一項目名で書いた物は、以下の件数条件でリンクしています。 Aid<Bid<Cid 1<n<n+の関係です テーブル3のC名をコンボボックスCで選択入力できるようにします。 コンボボックスで選択内容を変える毎に、あるいはDBを読み込み表示しているデータが変わる毎に、別に設置したテキストボックスAに、A名称を表示するようにしたいのですが、可能でしょうか? どのようにすれば、実現できますか? ややこしい説明ですが、宜しくお願いします。

  • 複数のテーブルに対して・・・

    過去に同様の質問があったかも知れませんが、Accessのバージョンがかなり古いので質問させて下さいね。 Access97(すみません、ホント古くて…)で、下のような顧客情報管理ファイルを作成しました。 テーブルA<→フォームA> ・顧客ID(主キー: テキスト型) ・氏名 ・情報A1, A2~ ・入力フォームB~への移動ボタン(同一IDレコードの表示) テーブルB<→フォームB> ・顧客ID(主キー: テキスト型) ・情報B1, B2~ テーブルC<→フォームC> ・顧客ID(主キー: テキスト型) ・情報C1, C2~ 最初からテーブルA~Cを結合したものを作ればよかったのですが、 それぞれのテーブルについて細かい入力項目が30~40個あるため、 分割して作成してしまいました(そして今後もテーブルは増える可能性大です)。 現在、テーブルAにだけ、20人分のデータが入っています。 今後も顧客数やテーブルが増える予定なのですが、 その都度テーブルごとに顧客IDをいれるのが面倒になってきました。 そこでお訊ねしたいのですが、テーブルA(を元にしたフォームA)に顧客IDを入れると、 テーブルBやCにも同じテキストが入力されるような設定は可能でしょうか。 最初、クエリーで連結しようとしたのですが、 既にテーブルAにいくつかデータが入っているせいか、どうも上手く反映されません。 単に私の参照方法が下手だったからかもしれませんが…。

  • SQL 複数テーブルのupdate

    こんばんは。 複数テーブルの複数カラムをupdateしたいのですが、 うまくいかず困っています。 どなたか助けてください>_< テーブルA(tableA)のoptionAというカラムと、 テーブルB(tableB)のoptionBというカラムを両方更新したいんです。 やりたい内容のイメージとしてはこんな感じです↓ update tableA a, tableB b set a.optionA='OK', b.optionB='OK' where a.student_id=b.student_id and a.name='山田'; どなたかご指導お願いいたします。

  • テーブル名をカラムとして取得する方法

    テーブル名をカラムとして取得する方法はありますでしょうか? オラクル8とVB6でプログラムを組んでいます。 例 TABLE Aの内容 カラム1 1 2 3 TABLE B カラム1の内容 4 5 6 SQLは簡略化してかきます。下記のSQLを実行した場合、 select A.カラム1 from A union select b.カラム1 from b 1 2 3 4 5 6 を取得できます。 例えば、上記で、SQL実行後、 下記のような値を取得したいです。 1 ,Aのテーブルだよ 2 ,Aのテーブルだよ 3 ,Aのテーブルだよ 4 ,Bのテーブルだよ 5 ,Bのテーブルだよ 6 ,Bのテーブルだよ それぞれのテーブルの名前を別名で結果に格納したいのです。 何か方法はありますでしょうか? なければ、unionせずに、2回SQLを発行し、それぞれに、 プログラム上で、「Aのテーブルだよ」を後で挿入したいと思っています。

  • group by句

    色々と試行錯誤してやっていますが、なかなか自分の 思うような結果が得られないためご質問させて下さい。 テーブルが全部で3つあります。 テーブルA id name 1 巨人 2   西武 テーブルB id name 1 小笠原 2 ラミレス 3 中島 4  片岡 テーブルC id テーブルAID テーブルBID 背番号 1 1 1 30 2 1 2 10 3 2 3 3 4 2 4 8 テーブルを結合し、テーブルCにある 背番号をテーブルAid,テーブルBidを元に sumしたいのですがうまくいきません。 以下がそのSQLになります。 (1)サブクエリーを使ったSQL この場合値が重複されて表示されてしまいます。 select a.name,b.name,c.name, (select sum(背番号) from tableC c where c.テーブルAId = a.id group by c.テーブルAid ), (select sum(背番号) from tableC c where c.テーブルBid = bid group by c.テーブルBid ) from tableC c inner join tableA a on a.id = c.テーブルAid inner join tableB b on b.id = c.テーブルBid (2) select a.name,b.name,c.name, (select sum(背番号) from tableC c where c.テーブルAId = a.id ), (select sum(背番号) from tableC c where c.テーブルBid = bid ) from tableC c inner join tableA a on a.id = c.テーブルAid inner join tableB b on b.id = c.テーブルBid group by c.テーブルAid 重複はされないのですが、group byが一つのみなので ちゃんとした出力がされません。    他にやり方があるのかもしれませんが、お分かりになる方が    いらっしゃいましたら、ご教授お願い致します。

  • リレーションテーブルって何でしょうか?

    リレーションテーブルって何でしょうか? テーブルAとテーブルBの値が入っているXというテーブルがあり、 それはどうやらリレーションテーブルとかいうものらしいのですが、 ビューとの違いがよくわかりません。 詳しく教えていただけないでしょうか?

  • 複数のテーブルから登録順にデータ取得

    複数のテーブルから登録順にデータ取得なんてことできるのでしょうか? table_A A_id int A_time timestamp A_title text table_B B_id int B_time timestamp B_title text とtable_A table_Bにデータが存在するときに AB関係なく A_titleもしくはB_title を登録順のA_timeもしくはB_time 順に10個とかSQL一発でかけるのでしょうか? そもそもこのような作りにするな!ということでしょうが・・・

  • 複数のテーブルにまたがるDELETE

    カラム構成が同じのtable_Aとtable_Bがあります。 DELETE FROM table_A,table_B WHERE Column_1='you' AND Column_2='his' ORDER BY datetime LIMIT count といった具合に、 table_Aとtable_Bにまたがってdatetimeカラムが小さい順にcountの数だけ削除しようとしていますが、上記のSQL文ではエラーが出てしまいます。 誤りをご指摘願えればと存じます。よろしくお願いいたします。 versionはMySQL - 5.0.24-community-ntです。