Используя activerecord, я сделал этот запрос
AdImage.select("ad_images.id, ad_images.locale_id, ad_campaigns.click_url,
ad_campaigns.default_ad_image_id").joins("left outer join ad_campaigns on
ad_campaigns.id = ad_images.ad_campaign_id").where("ad_images.ad_campaign_id" => 1)
, который генерирует следующий SQL-запрос:
SELECT ad_images.id, ad_images.locale_id, ad_campaigns.click_url,
ad_campaigns.default_ad_image_id FROM "ad_images" left outer join ad_campaigns on
ad_campaigns.id = ad_images.ad_campaign_id WHERE "ad_images"."ad_campaign_id" = 1
, и в результате получается следующее:
=> [#<AdImage id: 22, click_url: "market://details?id=com.mobiata.flighttrack",
locale_id: 2>]
что неправильно.
Поэтому я использовал метод ActiveRecord :: Base.connection.execute для прямого запуска запроса sql:
ActiveRecord::Base.connection.execute("SELECT ad_campaigns.click_url, ad_images.id,
ad_images.locale_id, ad_campaigns.default_ad_image_id FROM ad_campaigns inner join
ad_images on ad_campaigns.id = ad_images.ad_campaign_id WHERE ad_images.ad_campaign_id = 1")
, который возвращает следующее:
[{"click_url"=>"market://details?id=com.mobiata.flighttrack", "id"=>22, "locale_id"=>2,
"default_ad_image_id"=>22, 0=>"market://details?id=com.mobiata.flighttrack", 1=>22,
2=>2, 3=>22}]
со странным повторением.
Единственное различие между первым и вторым - это "ad_images" и ad_images в именах таблиц.
Мои вопросы:
1) Я не понимаю, в чем заключается эта разница.
2) Почему второй запрос возвращает мусор в SQLite3, а на сервере MySQL этого не происходит?