使用join的Rails查询返回的结果少于应该的结果

时间:2015-03-11 01:51:57

标签: mysql ruby-on-rails ruby refinerycms

为什么我的查询只返回34条记录,但要返回的记录超过300条?

查询1:

2.1.5 :109 > Refinery::BeerBrands::BeerBrand.all.count
(0.5ms)  SELECT COUNT(*) FROM `refinery_beer_brands`
=> 34

查询2:

2.1.5 :106 > Refinery::BeerBrands::BeerBrand.joins(:brewery).count
(0.2ms)  SELECT COUNT(*) FROM `refinery_beer_brands` brewery
=> 34

查询3:

2.1.5 :112 > ::Refinery::Breweries::Brewery.all.count
(0.3ms)  SELECT COUNT(*) FROM `refinery_breweries`
=> 303

查询4:

2.1.5 :111 > ::Refinery::Breweries::Brewery.joins(:beer_brands).count
(1.0ms)  SELECT COUNT(*) FROM `refinery_breweries` INNER JOIN `refinery_beer_brands` ON `refinery_beer_brands`.`brewery_id` = `refinery_breweries`.`id`
=> 34

查询5:

2.1.5 :126 > ::Refinery::Breweries::Brewery.joins(:beer_brands).where(:refinery_beer_brands => { beer_type: [0,1,2,3,4,5] } ).count
(1.1ms)  SELECT COUNT(*) FROM `refinery_breweries` INNER JOIN `refinery_beer_brands` ON `refinery_beer_brands`.`brewery_id` = `refinery_breweries`.`id` WHERE `refinery_beer_brands`.`beer_type` IN (0, 1, 2, 3, 4, 5)
=> 34

为什么"查询5"只返回34条记录?所有" beer_brands"必须有" beer_type"选中,它在db 0-5中。我想要返回303条记录。每个啤酒厂都有很多啤酒品牌。

啤酒厂模型:

  has_many :beer_brands, :class_name => '::Refinery::BeerBrands::BeerBrand'

啤酒品牌型号:

  belongs_to :brewery,:class_name => '::Refinery::Breweries::Brewery'

如何获取具有类似查询的所有304条记录?我想在查询中过滤不同数组的记录。

//编辑16.3.2015:

好的,你是对的...但我有另一个问题。这个案子怎么样: 1)啤酒厂可以有啤酒品牌,但它并不是必须的 2)我想要啤酒厂标题或相关啤酒品牌标题的全文搜索

现在我的查询如下:

  out.includes(:beer_brands).where("refinery_breweries.title LIKE ? OR refinery_beer_brands.title LIKE ?", "%#{pars[:query]}%", "%#{pars[:query]}%")"

现在它抛出错误:

  Unknown column 'refinery_beer_brands' in 'where clause'

1 个答案:

答案 0 :(得分:1)

您的查询1和2显示您在啤酒品牌中只有34条记录,这意味着只有少数啤酒厂拥有啤酒品牌而不是所有303品牌,这就是为什么它只返回34条记录。如果您仍需要所有303条记录,请使用left outer joinright outer join。但你显然会得到其他啤酒厂的零值。