• ベストアンサー

内部結合で3つ以上テーブルを指定する事は可能でしょうか?

TrickOrTreatの回答

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

もうすこし具体的なことがわかるとよい のですが、ほとんどすべてのRDBMSでは、 (オラクルでもMS-SQLでも) 3つ以上のテーブルの内部ジョイン(結合)は 可能です。 select ... from table1,table2,table3 where table1.key1 = table2.key1 and table2.key2 = table2.key2 のようにジョイン条件を and でつなげてあげれば いいだけです。

matchori
質問者

お礼

ありがとうございます。 私のSQLが間違っていたようで、できるようです。 SymfowareというDBでもできました。

関連するQ&A

  • 9iのSQL:1999構文を使用した外部結合について

    内部結合の結果とともに、左側の表の持つ一致しない行を戻す結合を左側外部結合、右側の表の持つ一致しない行を戻す結合を右側外部結合と言います。 LEFT OUTER JOIN, RIGHT OUTER JOINキーワードを使用します。 例)SELECT D.部署NO,D.部署名,D.場所,E.従業員,E.従業員名 FROM 部署 D LEFT OUTER JOIN 従業員 E ON (D.部署NO = E.部署NO) ; というかんじでマニュアルに記載されていますが、どこを基準に右側の表とか左側の表とかいっているのか説明だけでは理解できません。どなたか解りやすく教えてください。

  • 内部結合

    テーブルの自己結合について教えてください。 以下のようなテーブルAがあります。 Table A collumn1(企業名) collumn2(フラグ) B           0 C           0 D           1 B           1 C           0 E           0 E           1 E           1 これにおいて、フラグが1の企業でかつ フラグの如何に関わらず同じ企業名があればその企業名を とってきたいです。 上の例では企業BとEとなります。 企業名が同じでもフラグが0のものばかりであればとってきません。 この条件を私が考えたのは select collumn1 from A where collumn2 = 0 and collumn1 = (select collumn1 from A where collumn2 = 1) というSQLなのですが、うまく取れません。 なにも取って来なくなります。 何がいけないでしょうか。 アドバイス、よろしくお願いいたします。

  • 外部結合について

    外部結合というのは、表と表を結合するという事で FROM句に書くべきことと思うのですが、 なぜWHERE句(カラム毎に指定)で指定するのでしょうか? 例えば、 テーブルA No|Kind|Name| ------------- 1|1 |A | 1|2 |B | 2|1 |C | 2|2 |D | テーブルB No|Kind|Data| ------------- 1|1 |10| 外部結合で SELECT A.No, A.Kind, A.Name, B.Data FROM A,B WHERE A.No = B.No(+) AND A.Kind = B.Kind(+) とすると No|Kind|Name|Data| ------------------ 1|1 |A |10| 1|2 |B |NULL| 2|1 |C |NULL| 2|2 |D |NULL| となります。 A.NoがB.NoになくてもOKで、Kindは 完全に一致しないとだめという意味で SELECT A.No, A.Kind, A.Name, B.Data FROM A,B WHERE A.No = B.No(+) AND A.Kind = B.Kind とした場合、 No|Kind|Name|Data| ------------------ 1|1 |A |10| 2|1 |C |NULL| となるのであれば納得いくのですが、 結果は↓なるようです。 No|Kind|Name|Data| -------------------------- 1|1 |A |10| (+)を一つも付けてない場合と 同じ動作になるようです。 テーブルAとテーブルBを結合するとき、 「外部結合する場合はWHERE句で指定する選択の条件全てに(+)を付ける」 「外部結合をしない場合はWHERE句で指定する選択の条件全てに(+)を付けない」 であれば、カラム毎に外部結合演算子を指定する意味が無いと思うのですが。 どなたか、カラム毎に外部結合演算子を指定する意味をご教授下さい。 宜しくお願いします。

  • 3テーブル外部結合方法について

    3つのテーブルを外部結合したいのですが・・・、 こんがらがってしまいました。 A,B,Cの3テーブルがあり、A,B,Cの順に外部結合 (LEFT OUTER JOIN)したいのですが、 A,BのテーブルについてはWhere句の条件指定が 必要です。 Select From (Select AA.a From A AA Where b = xxxx) BB Left Outer Join (Select CC.b From B CC Where c = eeee and BB.a = CC.b) On ???? こんな感じでつまづいてしまいました・・・

  • 巨大テーブルの外部結合

    巨大なテーブル同士を結合する際に、みなさんはどのように結合されますか?もっともパフォーマンスのある方法を模索しているところです。 テーブルA:約900万件 テーブルB:約400万件 テーブルAのインデックスはカラム:idです。 テーブルBにはインデックスはありません。 取得したいのはBテーブルに含まれるAテーブルのidの件数です。 select  count(id) from B where A.id = B.id なんてやると、数時間かかります。 select count(id) from B where exists(select * from A where A.id = B.id) ですと、約3hぐらいかかりました。 inで実行すると等価結合したときと変わらないぐらいになります。 こういう場合、皆さんはどう結合されていますか? お知恵を拝借できると幸いです。 ちなみにoracle 8iです。 よろしくお願いいたします。

  • MySQLテーブルの結合

    MySQLテーブルの結合 select フィール名(field1,field2,field3)from xテーブル名 [inner/left/right] join yテーブル名 on 結合条件 解説書には説明されています 現在自分のデータベースは ahogedb(テーブル名) no hoge1 hoge2 bhogedb(テーブル名) no ahogeno(ahogedbのnoを登録) hoge3 ahogedbを表示してbhogedbでの訪問回数を表示させたいのです bhogedbのahogenoにはahogedbのnoが逐次登録されています 表示はno,hoge1,hoge2に追加したahogenoのカウント数 select文の式の書き方を出来れば1列にして教えてください ahogenoは別名の変数処理するのでしょうか

    • ベストアンサー
    • MySQL
  • 異なる二つのテーブルの結合について・・・

    お世話になっております。 ちょっとややこしい質問になります。 「1」 Aと言うテーブルのAAと言うカラムから、$AAAと言うレコードを抽出致しました。ここまでは出来ました。(ここでの抽出結果を$CCCと致します。) 「2」 「1」の抽出結果($CCC)を元に、Bと言うテーブルのBBと言うカラムから、BBBと言うレコードも抽出し結合したいと考えております。 一番の問題は、「1」で出た結果(CCC)を元に、抽出する事が出来ません。 「1」のソースのみ完成してます。 $rs=$DB->query("SELECT * FROM `A` WHERE AA = '$AAA' ↑の抽出結果=$CCCを元に↓ $rs=$DB->query("SELECT * FROM `B` WHERE BB = '$CCC' 結合させたいんです!! セクションしているので結合できないとバラバラになってしまいます。。。。 ご教示お願い致します! inner join を使うのは分かるのですが・・・進めません。(泣)

    • ベストアンサー
    • MySQL
  • 内部結合する時の結合条件と制約条件について

    内部結合する時の結合条件と制約条件について 下記の例の場合の結合条件と制限条件の書き分けを 教えて下さい。 table1: no|type --------- 1| A 2| B 3| C 4| A 5| C table2: no|type|name|locale ------------------- 1| A |ネコ| ja 2| B |イヌ| ja 3| C |トリ| ja 4| A |cat | en 5| B |dog | en 6| C |bird| en 取得したいデータ: no|type|name ------------- 1| A |ネコ 2| B |イヌ 3| C |トリ 4| A |ネコ 5| C |トリ SQL: SELECT t1.no, t1.type, t2.name FROM table1 t1 INNER JOIN table2 t2 ON t1.type=t2.type AND t2.locale='ja' または SELECT t1.no, t1.type, t2.name FROM table1 t1 INNER JOIN table2 t2 ON t1.type=t2.type WHERE t2.locale='ja' となると思うのですが、 t2.locale='ja'の条件は 結合条件とするのと制限条件とするのとで 違いがあるのでしょうか? もし違いがない場合はどちらが一般的でしょうか? よろしくお願いいたします。

  • 4つのテーブルから、該当する項目を一度に検索したい。重複除く

    4つのテーブルから、それぞれ違う条件で検索し、該当する項目名NO を探したいのですが、どのようなselect文を書くと効率よく検索できる のでしょうか?また、重複NOは除きたいのです。 良かったら教えて下さい。 例えば、テーブル名:test1,test2,test3,test4とあった場合、 一度に該当するNOを拾い出す方法があれば、教えて下さい。 1.select no from test1 where code = '' and day < 20041118; 2.select no from test2 where day < 20041118; 3.2.select no from test3 where data != '' and day < 20041118; 4.select no from test4 where day > 20041018 and day < 20041118;

  • mysqldumpのwhereテーブル指定について

    約1億レコードあるテーブルをWhere条件で絞ってダンプしたいのですが、下記方法でダンプすると、DBのすべてのテーブルに対応してしまう為、エラーとなってしまします。 Where条件設定時に、テーブルを指定する事は可能でしょうか? OS:CentOS6.7(64Bit) Mysql Ver:5.1.73(yumインストール) テーブル構成 テーブル名:systemevents ID : int(10) DeviceTime:datetime FromHost: varchar(60) Message:txet ◎絞り込み条件 mysqldump -uroot -p --where 'DeviceTime between '開始日' And '終了日' and FromHost Like '%ホスト名%'' 上記を実行すると、syslog以外のテーブルにも実行されるようで、下記エラーが表示されます。 mysqldump: Couldn't execute 'SELECT /*!40001 SQL_NO_CACHE */ * FROM `SystemEventsProperties` WHERE DeviceTime between 2015/08/01 and 2015/08/31': Unknown column 'DeviceTime' in 'where clause' (1054) where 条件指定じに、テーブルを指定する事は出来ないか? mysqldumpのほかに、DB構造を含めたデータを出力する方法はないか? いずれかの方法をお教え頂けましたら幸いです。