1

不能在 Rhomobile 中执行左连接吗?

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

我需要做一个简单的 SQL 左连接,所以我从 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

我知道我可以做两个选择并自己加入它们,但这是一种非常糟糕的方式

4

2 回答 2

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)
于 2013-09-13T14:11:44.463 回答
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")
于 2013-02-11T10:29:57.737 回答