• 締切済み

親子関係があるテーブルでの抽出

教えてください。 ASPでMDBを検索したいのですが、 SQLにどうかけばいいのか悩んでします。 テーブルAがあります。 ID、名前、住所、親IDというフィールドがあります。 実は親子関係がこのテーブルには含まれていまして、 子データには、親IDに親データのIDが入っています。 子データにも名前、住所が入っています。 親データの親IDには0が入っています。 このテーブルAの名前・住所・子データの名前・子データの住所で 文字検索したいのですがどのようなSQLになりますか? 子データは、ないものもあります。 以上よろしくおねがいします。

みんなの回答

noname#60992
noname#60992
回答No.3

説明が下手で申し訳ありません。  テーブルA.親ID = テーブルA_1.ID  ということはテーブルAは子データで、テーブルA_1が親データということになると思います。  (テーブルAの親ID = テーブルA_1のIDという設定をしていますので。)

angelinaane
質問者

お礼

すみません。 やっとわかりました・・・。 教えていただいたSQLでは、 親子関係のあるデータしかとってこれないので、親のみデータと親子データを抽出して。さらにユニオン作成することにしました。 何度もありがとうございました。

noname#60992
noname#60992
回答No.2

失礼しました。 完全に質問を取り違えていました。 現状のデータ構造のまま考えるなら、親のデータを含めて表示させるクエリを作って抽出するのが一番楽だと思います。 そっくり同じテーブル テーブルA_1 にリンクをつけて、 SELECT テーブルA.ID, テーブルA.名前, テーブルA.親ID, テーブルA_1.名前 FROM テーブルA LEFT JOIN テーブルA AS テーブルA_1 ON テーブルA.親ID = テーブルA_1.ID; ちょっとフィールドを端折っていますが、これにwhere句をつければできると思います。 

angelinaane
質問者

補足

再び、回答ありがとうございます。 教えてもらったとおりにしてみたのですが、だめです。 これって、テーブルA_1が子ですよね? でもテーブルAに子データが表示されます。

noname#60992
noname#60992
回答No.1

子データのみを抽出したいなら、 WHERE句に 検索条件については、普通通りLIKEを使ってそれに  AND [親ID]=0 を加えればよいだけだと思います。

angelinaane
質問者

補足

書き方がややこしくてもすみません。 親データ・子データともに検索対象です。 あと子データは、親ID=0ではないです。

関連するQ&A

  • 親子関係のテーブルについて

    現在SQLServerを使用した、Webアプリケーションの製作を行なっています。 そのデータベース内で、親子関係があるテーブルを使用しており、親テーブルの主キーIDを、子テーブルの外部キーに設定しています。 親テーブルの主キーIDはidentityを使用して連番にしています。 親子関係があるテーブルは、親が登録されると、すぐに子のテーブルにもデータを追加するという形で、親テーブルが追加された直後に親テーブルの主キーIDをMAX関数を使用して取得し、子テーブルに登録しております。 このやり方ですと、通常は問題は無いのですが、同時に連続してアクセスがある時に、親テーブルの主キーIDを取得する際に、ずれが生じたりして正確な親子関係にならない場合があります。 この手法は一般的な手法ではないのでしょうか?また、何かいい対処法はございませんでしょうか? お力をお貸しください。よろしくお願いします。

  • 親子関係があるテーブル内での検索

    親のidを保持するテーブルです。 CREATE TABLE `tbl` ( `id` int PRIMARY KEY, `parent_id` int, FOREIGN KEY(`parent_id`) REFERENCES `tbl`(`id`) ) ENGINE=InnoDB; このテーブルで「parent_idがNULLで、かつ、子を持たない(親というか子でもないというか)行」 を検索したいのですが、どのようなSQLを記述すれば良いのでしょうか?

    • ベストアンサー
    • MySQL
  • 複数のテーブルから複数条件で新規テーブルへ抽出するには?

    こんにちわ。 Windows2000、Access2000という環境下で、 住所録の統合をしようとしています。 簡単な構成は、前任者が、グループ関連会社別に住所録のmdbを作っており、各テーブルのフィールドで主要なものは、「通し番号(各mdbごと)」「氏名」「会社名」「住所」です。 ここで、最終的にテーブルを一つにまとめれば完了としたいところなのですが、 2002年夏の時点での住所録A.mdb 2003年冬の時点での住所録B.mdb 2003年春の時点での住所録C.mdb とあり、それぞれにBの時点での新規入力・(住所等の)更新、Cの時点での新規入力・更新があるのです。 BはAを元に作られており、CはBを元に作られています。 ダブっている部分があるのです。 そこで、AとBを比較してAの中で「氏名」、「会社名」が同じもの以外と、Bのデータを新しいDBのテーブルへ、 新しくできたDBのテーブルとCのテーブルとを比較して、「氏名」「会社名」が同じものは、既存のレコードを消去してCのデータを追加するということをやりたいのです。 つまり、BやCでの更新・新規入力をうまく反映させた形の住所録にしたいのです。 Access自体の使い方に不慣れなもので、この作業がAccessのクエリ等の組み合わせでできるのか、それともSQLやVBAを駆使しないと無理なのかの判断もつきません。 どなたか参考になりそうな操作やSiteを知っていましたら、 教えてください。 よろしくお願いします。

  • ACCESS テーブルの結合

    同じmdb内で複数テーブルがあります。(テーブル1から10まで)フィールド名はすべて同じです。それぞれのテーブルのIDは1からオートナンバーになってます。 【例】 テーブル1  フィールド名: ID A B C テーブル2   フィールド名:ID A B C  ・ ・ テーブル10   フィールド名:ID A B C  ひとつのテーブルで管理したいのですが・・・教えてください。

  • 別のテーブルのフィールドを抽出項目にするには?

    別のテーブルのフィールドを抽出項目にするには? Access初心者です。 申し訳ありませんが、急ぎ回答いただきたく思います。 どうか宜しくお願いいたします。 お伺いしたい内容は、 データが多く、抽出条件も多いので、 別のテーブルのフィールドに入っている単語を使い、 抽出したい元データのレコードをあいまい検索して非表示にしたいです。 データの内容は下記になります。 --------------------------------------- 元データ(テーブル1とテーブル2から結合したクエリ(名前は元データ) フィールド1 フィールド2 ID-1     りんご ID-2     バナナ ・       ・ ・       ・ ・       ・ ID-2000    チェリー --------------------------------------- --------------------------------------- 除外リスト(テーブル3。名前は除外リスト) フィールド1 りんご チェリー ・ ・ ・ --------------------------------------- 元データのフィールド2に Not Like "*りんご*" And Not Like "*チェリー*" と記述すれば、フィールド2にりんご、チェリーを含むレコード以外のものが表示され、 欲しい情報が手に入るのですが、(上記例だとバナナのみ表示される) 実際にはりんご、チェリーなどあいまい検索し、非表示にしたいキーワードが100個あります。 なので、除外リストというテーブルをつくり、 そのフィールド内に書かれたキーワードを使い Not Like "*りんご*" And Not Like "*チェリー*" と同じような表示結果になるようにしたいのですが、 やり方が調べてもどうしてもわかりません。 どうか皆様のお力を貸してください。 宜しくお願いいたします。

  • 結合して余りを抽出したい

    こんにちは。SQL文についてお教えください。 TABLE AとTABLE Bがあります。両テーブルにはIDというフィールドがあります。 データは下記のように入っているとします。 TABLE A ID:1,2,3,4,5 TABLE B ID:1,2,3 SQL文を実行した時、4,5を抽出したい。 二つのテーブルを比べ、片方のテーブルにないものを抽出したいと思っています。 つまり、TABLE A - TABLE Bを行い、余ったIDのみを抽出したいと思います。 内部結合は理解したのですが、これではできません。どうすれば解決できるのかお教え頂けませんでしょうか? よろしくお願い致します。

  • 親子関係のテーブルを取得して多次元配列化するには

    お世話になります。 基本的な質問かもしれませんが、教えて頂けますとうれしいです。 PHP Version 5.4.14 MySQL 5.5.27 の環境です。 MySQLでたとえば以下のようなテーブルを3種類用意したとします。 ●group gr_id | gr_name | gr_status 1 | 野菜 | 1 2 | 果物 | 1 3 | 穀物 | 0 ●product pr_id | pr_name | pr_gr_id | 1 | 大根 | 1 | 2 | キャベツ | 1 | 3 | にんじん | 1 | 4 | イチゴ | 2 | 5 | 米 | 3 | ●picture pc_id | pic_file | pc_pr_id | 1 | 1.jpg | 1 | 2 | 5.jpg | 1 | 3 | 10.jpg | 1 | 4 | 100.jpg | 2 | 5 | aiueo.jpg | 2 | 6 | kakikuk.jpg | 3 | 6 | xxxxxxx.jpg | 4 | 6 | zzzzzzz.jpg | 5 | 各テーブルは (親)group[gr_id] = (子)product[pr_gr_id] (子)product[pr_id] = (孫)picture[pc_pr_id] の項目で、親、子、孫の関係になっています。 このとき、gr_status = 1 に該当する全データを、 3つのテーブルを連結した上で取得し、 「親テーブルの結果 => 子テーブルの結果 => 孫テーブルの結果」 という形で多次元配列化したいのですがどのようにすれば出来そうでしょうか? SQLでそのように取得する方法があるか、それとも 一度全データを取得した後、PHPで入れ子にする方法があるのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 親子に分けた方が良い? テーブルの正規化?

    ■知りたいこと ブログカテゴリー(親・子) を取り扱う際、普通は「1テーブル」でいくのでしょうか、それとも、親と子の2テーブルを作成するのでしょうか? ・それぞれのメリットデメリットは? ・「ケースバイケースによるので一概には言えない?」or「どちらでも同じ?」 ・また、「2テーブル(親子)」に分けることを正規化というのでしょうか? ■現状 ・1テーブルで運用(parent_idカラム利用) ・子カテゴリー数が多くなると、phpMyAdmin等で目視する際、カテゴリーテーブルから親カテゴリーIDを探しづらくなる(条件で抽出するので、大きな問題ではないですが)

    • ベストアンサー
    • MySQL
  • Tableを動的に増やしたい。

    お世話になります。 asp.net(c#)で開発をしています。 c#は初めて1月程度です。 やりたいことは、 Tableを動的に増やす。 と言うことです。 たとえば、こんなイメージです。 <asp:Table ID="Table001"></asp:Table> <asp:Table ID="Table002"></asp:Table> <asp:Table ID="Table003"></asp:Table> .... と言うように、データの条件に合わせてテーブルを動的に増やして表示。そして、その各テーブルは<p></p>タグで切り分けたいのです。 表示するデータはSQLで取得し、その抽出条件によって、テーブルの個数が変動することが考えられます。 ご存知の方、知恵をお貸しください。

  • 重複しないデータの抽出について

    MYSQL5.0.77で DBをつくり テーブル1のAフィールドのデータから テーブル2のAフィールドのデータ、 テーブル3のAフィールドのデータ、 テーブル3のAフィールドのデータ、 のいずれにも重複しないデータのみ 抽出したいと思っています。 どのようなSQL文を書けばよいでしょうか? じぶんでいろいろ試しましたがどうしても出来ません。 どなたかご教授願います。

    • ベストアンサー
    • MySQL