在Rhomobile中执行左连接

时间:2013-02-10 20:32:59

标签: rhomobile rhodes

是否无法在Rhomobile中执行左连接?

我有PriceGroups,PriceLookup的模型,它们具有1-many关系(即每个PriceGroup并且有许多PriceLookup记录)。

我需要做一个简单的SQL Left Join,所以我从PriceGroups表中获得了所需的信息

SELECT * FROM PriceLookup 
LEFT JOIN PriceGroups ON PriceLookup.price_group_code=PriceGroups.code

我已将此添加到price_lookup模型中:

  belongs_to :price_group_code, 'PriceGroups'

以下是我在Rhomobile试过的内容

PriceLookup.find_by_sql("SELECT *
FROM PriceLookup
LEFT JOIN PriceGroups on PriceLookup.price_group_code=PriceGroups.code")

但我得到错误:

Error: could not prepare statement: 1; Message: no such table: PriceGroups

我知道我可以做两个选择并自己加入,但这是一个非常废话的方式

2 个答案:

答案 0 :(得分:2)

您需要将RhoMobile模型创建为FixedSchema,而不是使用默认的PropertyBags。

否则,您在SQLite中没有真正的表,但是您正在使用实现键值存储的特殊objectValues表: http://docs.rhomobile.com/rhodes/rhom#fixed-schema

示例:

dbPT = ::Rho::RHO.get_src_db('PriceLookup')
sql = "SELECT * FROM PriceLookup LEFT JOIN PriceGroups ON PriceLookup.price_group_code=PriceGroups.code"
lines = dbPT.execute_sql(sql)

答案 1 :(得分:0)

如果尚未初始化(创建)表PriceGroups,则可能会发生这种情况。如果模型类不存在,则会在加载模型类时创建表。 对于您的情况,只需调用模型类,这将加载它并在必要时创建表。

PriceGroups; #Only for create the table

PriceLookup.find_by_sql("SELECT * FROM PriceLookup LEFT JOIN PriceGroups on PriceLookup.price_group_code=PriceGroups.code")