- ベストアンサー
JOIN 句の書き方について
毎度お世話になっております。 以下のテーブルの内容があります。 ・テーブル1 フィールド1 a ・テーブル2 フィールド1 親 子 孫 1 a なし なし 2 なし a なし 3 なし なし a 4 なし なし なし ここで、テーブル1.フィールド1の内容を含む テーブル2の行を抽出したいのです。 ・希望する結果 フィールド1 親 子 孫 1 a なし なし 2 なし a なし 3 なし なし a 以下のSQL文を作成したところ希望する結果になりましたが、 ONの中にORを書いてもよいのでしょうか。 それともUNIONクエリにすべきなのでしょうか。 SELECT テーブル2.フィールド1, テーブル2.親, テーブル2.子, テーブル2.孫 FROM テーブル1 LEFT JOIN テーブル2 ON (テーブル1.フィールド1 = テーブル2.孫) OR (テーブル1.フィールド1 = テーブル2.子) OR (テーブル1.フィールド1 = テーブル2.親); よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
関連するQ&A
- JOINの方法について
毎度お世話になっております。 以下のテーブル1、テーブル2があります。 [テーブル1] CODE 1月 2月 A 10 10 C 30 30 [テーブル2] CODE 3月 4月 A 10 10 B 20 20 D 40 40 これを以下のようにくっつけたいのです。 [希望する結果] CODE 1月 2月 3月 4月 A 10 10 10 10 B 20 20 C 30 30 D 40 40 クエリ1(テーブル1 LEFT JOIN テーブル2とする)と、 クエリ2(テーブル2 LEFT JOIN テーブル1とする)を作り、 UNIONでくっつける方法を考え、希望した結果は得られましたが、 もっとスマートな方法(一つのクエリでできるような方法)が あればご教授ください。
- ベストアンサー
- その他(データベース)
- どちらのLEFT JOINが早いでしょうか?
下記2つのテーブルがあったとします。 ・大テーブルA 7000万件 ・小テーブルB 2000件(※現在はWHERE句で指定すると1件) をJOINする場合、下記のどちらの方法が望ましいでしょうか? 案1)子テーブルを親とする方法 テーブルA(ON句により1件~2000件) LEFT JOIN 7000万件のテーブルB 案2)親テーブルを子とする方法 7000万件のテーブルB LEFT JOIN テーブルA(ON句により1件~2000件) 又、LEFT JOINの、ON句で条件を絞るのと、 WHERE句で条件を絞るのではどちらが好ましいでしょうか?
- ベストアンサー
- MySQL
- joinの場合のテーブル名の別名の使用方法
select * from table1 a,table2 b where a.field1=b.field1; とできますが select * from table1 as a left join table2 as b on a.field1=b.field1; とできません。 joinの場合にテーブル名の別名を使う方法を教えてください
- ベストアンサー
- PostgreSQL
- JOIN句への変換
はじめまして。 「*=」をJoin句に直したいのですが、同様の結果がえられません(T.T) SQL初心者です、どうぞよろしくお願いいたします。 この式をJOIN句に直したいです。 FROM A_TBL, B_TBL as B_TBL01, B_TBL as B_TBL02, C_TBL, D_TBL WHERE A_TBL.No = B_TBL01.No AND A_TBL.No = B_TBL02.No AND A_TBL.No = C_TBL.No AND A_TBL.No *= D_TBL.No AND C_TBL.ID *= D_TBL.ID AND ↓こうしたのですが、正しい結果がえられません。 FROM (D_TBL RIGHT OUTER JOIN C_TBL ON C_TBL.ID = D_TBL.ID) RIGHT OUTER JOIN A_TBL INNER JOIN B_TBL AS B_TBL01 ON A_TBL.No = B_TBL01.No1.No INNER JOIN B_TBL AS B_TBL02 ON A_TBL.No = B_TBL02.No2.No ON A_TBL.No = D_TBL.No AND A_TBL.No = C_TBL.No どうぞ、ご教授お願いいたします。
- ベストアンサー
- SQL Server
- ~JOIN ON句でこのような問い合わせはできるのでしょうか?
SELECT * FROM `テーブル1` AS t1 LEFT JOIN `テーブル2` AS t2 ON ( ( t1.a * 100000 ) + t1.b ) = t2.a エラーはでませんが、意図したレコードが返ってきません。クエリの使い方が間違っているのでしょうか?教えてください。 検証環境:MySQL 4.0.24-standard
- ベストアンサー
- MySQL
- ちょっと見かけないinner joinについて
どなたか以下の構文について教えて下さい。 どこのDBMSで使用されるものなのでしょう? SELECT B.項目1, B.項目2, A.項目2, A.項目3 FROM ( ( SELECT * FROM Bテーブル WHERE 項目3>"1" ) B INNER JOIN ( SELECT * FROM Aテーブル WHERE 項目2=10 ) A ON B.項目1=A.項目1; 意味はわかるのですが、普通のinner joinとは違うもので。
- 締切済み
- その他(データベース)
- ACCESS での LEFT JOIN 時の WHERE 句の使用について
以下のテーブル1、テーブル2で、 テーブル2のDATE2が、テーブル1のDATE以前になっている VOL2を集計したいと考えています。 テーブル1 CODE DATE VOL --------------------------- a 20080601 100 a 20080602 100 a 20080603 100 テーブル2 CODE DATE2 VOL2 ------------------------ a 20080602 50 a 20080603 50 希望する結果のイメージ CODE DATE VOL VOL2 --------------------------------------- a 20080601 100 0 a 20080602 100 50 a 20080603 100 100 以下のSQLを考えましたが、DATE以前のDATE2を持たない場合、 テーブル1の行が表示されませんでした。 SQL文 SELECT t1.CODE, t1.DATE, t1.VOL , Sum(t2.VOL2) AS VOL2の合計 FROM テーブル1 as t LEFT JOIN テーブル2 as t2 ON t1.CODE = t2.CODE WHERE t1.DATE >= t2.DATE2 GROUP BY t1.CODE, t1.DATE, t1.VOL 結果 CODE CDATE VOL VOL2の合計 -------------------------------------- a 20080602 100 50 a 20080603 100 100 SQL文中にある WHERE t1.DATE >= t2.DATE2 が原因しているのではと考えています。 しかし、どのようにしたらよいのかがわかりません。 どなたか、ご教授をお願いします。
- ベストアンサー
- その他(データベース)
- LEFT JOINが2つあるSQL文でANDの意味
■下記SQL文の意味を教えてください SELECT a.*, b.being_name FROM alive a LEFT JOIN being b ON a.hoge_id = b.id LEFT JOIN call c ON c.call_id = a.hoge_id AND f.hoge_id = 12 WHERE f.hoge_id = 12 OR b.id = 12 ※12の部分は動的に切り替わります ・LEFT JOINが2つあるので、3つのテーブルを結合しているのでしょうか? ・左テーブルは「alive a」で、この右側に2つのテーブルが結合している、という認識でよいでしょうか? >SELECT フィールド名 FROM テーブル名 WHERE 条件式1 AND 条件式2 >「AND」は2つの条件式の論理積 ・上記内容をネットで見かけたのですが、「AND」は、「WHERE」の前に来てもいいのでしょうか? それともこのSQLの「AND」は違う使い方をしているのでしょうか? 何か、LEFT JOINに関係しているのでしょうか?
- ベストアンサー
- MySQL
- Doctrineのjoinについて
symfony+Doctrineで開発をしています。 他のプログラムは経験があるもののPHP初心者です。 2つのテーブルをjoinして、両テーブルの結果を取得します。 where句の条件どおりに行数を得られているので、 joinはできていると思います。 でも、結果を取得することが出来ません・・。 具体的には、joinしたテーブル(BTable)のカラムを取得しようとすると、 「Unknown record property / related component "value" on "ATable"」というエラーが出てしまいます。 (ATableにはvalueなんてないよ、って言っているみたいですが) ●ソースはこんな感じ $query = Doctrine_Query::create() ->select('a.name, b.value') ->from('ATable a') ->innerJoin('a.Btable b') ->where('b.id = ?', $id); $list=$query->execute(); foreach($list as $xxx){ print_r($xxx['name']); print_r($xxx['value']);←ここでエラー } ●エラーメッセージ Unknown record property / related component "value" on "ATable" そこで質問させてください。 ・xxx['value']の箇所は、どのように記述すればいいのでしょうか? ・もしくは、Doctrineではjoinしたテーブルの値は取得できないのでしょうか? (webでいろいろ調べましたが、joinの例はあるものの、select結果を使う、といった例が見つかりませんでした・・) 方法がないのであれば、 あらかじめテーブルをjoinしたviewを作って、 それをselectするようにしようと思っています。 symfony+Doctrineに詳しい方がいらっしゃたら、 よろしくおねがいします。
- ベストアンサー
- PHP
- LEFT JOIN とRIGHT JOINの合体版のような結合方法。
LEFT JOIN とRIGHT JOINの合体版のような結合方法。 使用DBはMySQL5.0.45です。 2つのテーブルの結合方式で、結合条件に合致しなかった場合、 両方のデータを結果セットに含めることはできますか? LEFT JOINだと、左側のテーブルのデータは結果に返ってきて、右側のデータはNULLになります。 RIGHT JOINだと、右側のテーブルのデータは結果に返ってきて、左側のデータはNULLになります。 これを「左側データあり右側NULL」「左側NULL右側データあり」というレコードを混ぜて結果として返したいです。 具体的には、 以下二つのテーブルがあるとします。 table : test1 value id ------------------- ああ 3 いい 4 うう 5 table : test2 value id -------------------- AAA 1 BBB 2 CCC 3 DDD 4 id を結合条件のキーとして、以下のような結果を得たいです。 NULL NULL AAA 1 NULL NULL BBB 2 ああ 3 CCC 3 いい 4 DDD 4 うう 5 NULL NULL LEFT JOINだと以下の結果に、 SELECT * FROM test1 LEFT JOIN test2 ON test1.id=test2.id ああ 3 CCC 3 いい 4 DDD 4 うう 5 NULL NULL RIGHT JOINだと以下の結果になってしまいます。 SELECT * FROM test1 RIGHT JOIN test2 ON test1.id=test2.id NULL NULL AAA 1 NULL NULL BBB 2 ああ 3 CCC 3 いい 4 DDD 4 以上、ご教示お願い致します。
- ベストアンサー
- MySQL
お礼
回答ありがとうございます。 頭をひねってひねって考えたのがORを入れる方法と ユニオンクエリだったのですが、 いろいろ方法があるのですね。 勉強になります。 ありがとうございます。