2015年9月26日のブックマーク (5件)

  • ActiveRecord4でこんなSQLクエリどう書くの? Merge編 | Webシステム開発/教育ソリューションのタイムインターメディア

    ActiveRecord4でこんなSQLクエリどう書くの? Merge編 #activerecord#rails#ruby 2013年 10月 24日 nishio 「このデータ取得するのにSQLではこういう風に書けばいいんだけど、ActiveRecordでは一体どう書けばいいの?」 毎回この課題に悩まされています。 特に業務アプリの場合、とてつもなく複雑なSQLを投げる場合があります。 ものすごい数のテーブルをjoinして、existsで条件みて、union allして。。。 なんていう処理がでてくると、さすがにActiveRecordやDatamapperを使ってクエリを組み立てるのをあきらめて、直接SQLを書いてしまうことがあります。 でも、できればActiveRecordを使ってスマートにSQLを組み立てたいものです。 scopeで書いておけば、処理も使い回せますしね。 ということ

    ActiveRecord4でこんなSQLクエリどう書くの? Merge編 | Webシステム開発/教育ソリューションのタイムインターメディア
  • 内部結合を行う(INNER JOIN句)

    2 つのテーブルを結合してデータを取得する方法の中で、指定したそれぞれのテーブルのカラムの値が一致するデータだけを取得する方法が内部結合です。ここでは MySQL で内部結合を行うための INNER JOIN 句の使い方について解説します。 内部結合とは 最初に内部結合について簡単に説明しておきます。内部結合とは2つのテーブルでそれぞれ結合の対象となるカラムを指定し、それぞれのカラムに同じ値が格納されているデータを結合して取得するものです。 次の図を見て下さい。左側のテーブルと右側のテーブルを内部結合します。結合の対象となるカラムは左側のテーブルが「部署ID」、右側のテーブルが「ID」です。この2つのカラムの値が同じデータ同士を結合し取得します。 左側のテーブルのデータの中で「部署ID」カラムの値が右側のテーブルの「ID」カラムの値の中にない場合にはデータを取得しません。 INNER JO

    内部結合を行う(INNER JOIN句)
    shomn-1818
    shomn-1818 2015/09/26
    取得するカラムの指定方法
  • 外部結合を行う(LEFT JOIN句, RIGHT JOIN句)

    2 つのテーブルを結合してデータを取得する方法の中で、指定したそれぞれのテーブルのカラムの値が一致するデータだけではなくどちらかのテーブルにだけデータがある場合も合わせて取得する方法が外部結合です。ここでは MySQL で外部結合を行うための LEFT JOIN 句および RIGHT JOIN句 の使い方について解説します。 外部結合とは 外部結合は内部結合と同じく2つのテーブルでそれぞれ結合の対象となるカラムを指定し、それぞれのカラムに同じ値が格納されているデータを結合して取得するものです。内部結合の場合は、一致しないデータは取得しませんでしたが、外部結合の場合は一致しない場合もデータとして取得します。 左側のテーブルにしかないデータも取得する方法を左外部結合、右側のテーブルにしかないデータも取得する方法を右外部結合といいます。 最初に左外部結合です。次の図を見て下さい。左側のテーブルと

    外部結合を行う(LEFT JOIN句, RIGHT JOIN句)
    shomn-1818
    shomn-1818 2015/09/26
    left join
  • RailsでActiveRecord/Arelを使って複雑なSELECT文を実行する方法 - Rails Webook

    Rails(ActiveRecord/Arel)で複雑なSELECT文を実行する方法をまとめました。 メリット、デメリットや使いどころなどまとめ途中なのであしからずお願いします。 動作確認 Ruby 2.2.0 Rails 4.2.0 Arel 6.0.0 目次 まとめ ER図 Active Record Arel 生SQL 1. まとめまず、個人的な意見として、それぞれの方法のメリット・デメリットをまとめました。 メリットデメリット ActiveRecord ・1, 2テーブル内での検索なら簡単に処理をかけれる ・返り値がActiveRecord::Relationやモデルのインスタンスなので扱いやすい ・複数のテーブルにまたがる検索で、検索条件、他テーブルのカラム値の扱いがしずらい ・CASE WHENやカラムなど行いづらい Arel 文字列でなくメソッドで検索文を記載できる(個人的に

    RailsでActiveRecord/Arelを使って複雑なSELECT文を実行する方法 - Rails Webook
    shomn-1818
    shomn-1818 2015/09/26
    3. Active Record joints inner join
  • 似ているようで全然違う!?Activerecordにおけるincludesとjoinsの振る舞いまとめ - Qiita

    似ているようで全然違う!?Activerecordにおけるincludesとjoinsの振る舞いまとめRubyRailsActiveRecord Activerecordを使ってるとき、関連(Association)のあるmodel同士をまとめて取得したい時がけっこうある。そんな時、includesやjoinsを使えば効率良くデータを取得出来るんだけど、実はこの二つは振る舞いや特徴が全然違ってたりする。ややこしい気がしたので、ここでちょっとまとめておく。 先に結論を書いておくと、基的には includesは先読みしてキャッシュしておく。 joinsはただINNER JOINしてくれる。 と思っておけばOK。 ちなみに、railsのversionは4.1.0。Web上に落ちてる情報は古いせいか若干現状の挙動とは違ってたりしたので、気をつけた方が良さそう。

    似ているようで全然違う!?Activerecordにおけるincludesとjoinsの振る舞いまとめ - Qiita
    shomn-1818
    shomn-1818 2015/09/26
    “joins” INNER JOIN