我联接了2个表(Modes和Prices),需要从这两个表中获取数据,但我得到了错误的不明确列名'min_weight'。如何指定它们以消除此错误?
表格
Modes: id, name, min_weight, max_weight, fixed_fee
Prices: id, min_weight, max_weight, price_per_km, mode_id
查询
@prices = Price.all.where(mode_id: @modes.ids).where('min_weight <= ?', @products_weight).where('max_weight >= ?', @products_weight).select("price_per_km")
@modes_prices = @modes.joins(:prices).where(prices: {id: @prices.ids}).select("modes.*, prices.price_per_km")
预期
I expect to get from @modes_prices: mode.min_weight, mode.max_weight, price.price_per_km
1条答案
按热度按时间des4xlb01#
我不知道Ruby和它的语法,但是你得到的错误在SQL中是相对“频繁”的。它说-当你从两个(或更多)表中选择列具有相同名称的行时,SQL * 引擎 * 不知道你要使用哪个表的列,它是“模糊的”。
例如,在Oracle中:
第6行是
select min_weight
。它有什么问题吗?Oracle不知道您要获取哪个min_weight:是属于modes
的列,还是属于prices
表的列(因为它们都包含该列)?第6行现在是
select prices.min_weight
,很明显我想要的值属于prices
表。你也应该这样做。例如:
再一次:我不知道Ruby,这可能不是“它”,但是--根本原因 * 是 * 相同的--你应该指定表名沿着列名。