• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数のテーブルの全てのカラムを一度に検索するには?)

複数のテーブルの全てのカラムを一度に検索する方法とは?

このQ&Aのポイント
  • 複数のテーブルの全てのカラムを一度に検索する方法について考えています。テーブルが複数ある場合、どのように検索すればよいか悩んでいます。
  • テーブルが1つだけなら、SELECT文を使用して各カラムを一つずつ指定して検索できます。しかし、複数のテーブルがある場合はどうすればよいのでしょうか。
  • 現在試している方法では、JOIN文を使用して複数のテーブルを結合して検索していますが、エラーが発生し、検索結果が0になってしまいます。他に効果的な方法はあるのでしょうか。

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

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.4

id名をそれぞれ変えたのですか? 「where ccc.id = 100」と書けばどの属性か特定できたのに。 表名・列名を``で括っていたり,join句を()で括っていたり, 変わった書き方をする人だなあと思っていたのですけれど, そうしなければならない明確な意図は別にないのかな, という印象を受けました。 失礼かとは思いますが, 全部のcolumnに索引がついているとか,データベースが正規化済とか, それもいま一度確認してみた方がよさそうに感じました。 ずるずると回答&補足が続くのは好みではないので, 私からの回答はこれで止めます。 格納データなど確認した上でそれでもトラブルが解消できないようであれば,また別の質問をたててみてください。

kiseki777
質問者

お礼

id名はそのように指定すればよかったのですね。 いろいろと参考になりました。ありがとうございました。 もしよければこちらを見て下さい。 http://oshiete.goo.ne.jp/qa/7534010.html

その他の回答 (3)

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.3

メッセージに登場する英語の意味を調べてみましたか? http://eow.alc.co.jp/search?q=ambiguous 「where id=100」に対して,idという属性は複数あるはずだから曖昧で分からないと言っているのです。

kiseki777
質問者

お礼

すみません、できました。 ですが遅いです。この検索方法自体は適切でしょうか。

kiseki777
質問者

補足

id名をそれぞれ変えて SELECT * FROM ( ( ( `ccc` INNER JOIN `bbb` ON `ccc`.`idc` = `bbb`.`idb` ) INNER JOIN `aaa` ON `ccc`.`idc` = `aaa`.`ida` ) INNER JOIN `ddd` ON `ccc`.`idc` = `ddd`.`idd` ) INNER JOIN `eee` ON `ccc`.`idc` = `eee`.`ide` where `ida`=100 AND a1='てすと' AND `b20`='さんぷる' AND `c5`='cの5番' AND `d2`='34534' AND `e9`='99998'

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

ddd.id に適切な値が入っているというのは確認された事実ですか? SELECT COUNT(*) FROM ccc INNER JOIN aaa ON ccc.id = aaa.id INNER JOIN ddd ON ccc.id = ddd.id や SELECT COUNT(*) FROM ccc INNER JOIN bbb ON ccc.id = bbb.id INNER JOIN ddd ON ccc.id = ddd.id を実行した場合は正確にカウントできており, どのテーブルかに関係なく,4つ目のテーブルを inner join した時点で変になるというのは確認された事実ですか?

kiseki777
質問者

お礼

ありがとうございます。 確認してみると、入力したはずのデータが反映されていませんでした。 データを入れて実行して見たところ数を取得できました。 SELECT COUNT( * ) FROM ( ( ( `ccc` INNER JOIN `bbb` ON `ccc`.`id` = `bbb`.`id` ) INNER JOIN `aaa` ON `ccc`.`id` = `aaa`.`id` ) INNER JOIN `ddd` ON `ccc`.`id` = `ddd`.`id` ) INNER JOIN `eee` ON `ccc`.`id` = `eee`.`id` それで、本題の部分ですが、 SELECT * FROM ( ( ( `ccc` INNER JOIN `bbb` ON `ccc`.`id` = `bbb`.`id` ) INNER JOIN `aaa` ON `ccc`.`id` = `aaa`.`id` ) INNER JOIN `ddd` ON `ccc`.`id` = `ddd`.`id` ) INNER JOIN `eee` ON `ccc`.`id` = `eee`.`id` where `id`=100 AND a1='てすと' AND `b20`='さんぷる' AND `c5`='cの5番' AND `d2`='34534' AND `e9`='99998' #1052 - Column 'id' in where clause is ambiguous 上手にできませんでした。 いろいろネットで調べてみてもINNER JOINしか見つからないのですが、 INNER JOINで1つのテーブルにし、そのテーブルをWHERE句で絞り込む。 何が間違っているのでしょうか。

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

columnに識別子を与えてデータベースを正規化する。 id|cl|bc ―+―+――――――― 01|01|あいうえおかき 01|02|あいうえおかき 01|03|あいうえおかき …|…|あいうえおかき 01|39|あいうえおかき 01|40|あいうえおかき 02|01|あいうえおかき 02|02|あいうえおかき 02|03|あいうえおかき …|…|あいうえおかき 02|39|あいうえおかき 02|40|あいうえおかき

kiseki777
質問者

お礼

>columnに識別子を与えてデータベースを正規化する。 ありがとうございます。データベースは正規化済です。 40個のカラムを5つのテーブルに分類しています。 分からないことは、5つのテーブルに分けたカラム40個全てを一度に検索する方法です。

関連するQ&A