2

是否可以在 sqlite.swift 中编写一个将生成等效 sql 的语句:

选择 foods.name, food_types.name FROM foods, food_types WHERE foods.type_id=food_types.id LIMIT 10;

我不知道如何一次从多个 Table 对象中查询。谢谢!

4

2 回答 2

6

您的原始查询将两个表传递给该FROM子句,从而创建一个隐式连接。SQLite.swift 的查询构建器语言目前只支持显式连接。

查看Joining Other Tables下的文档以获取有关连接表的更多信息。

在你的情况下:

let foods = Table("foods")
let food_types = Table("food_types")
let name = Expression<String>("name")
let id = Expression<Int64>("id")
let type_id = Expression<Int64>("type_id")

let query = foods
    .select(foods[name], food_types[name])
    .join(food_types, on: foods[type_id] == food_types[id])
    .limit(10)
于 2016-04-04T22:53:10.840 回答
0

我想到了。外键是我要加入的所有表的列,但有一些外键成员在所有表中并不常见,所以我相信 sql 然后生成一个交叉连接和一个内连接......这导致查询中的所有额外行。我通过使用 sqlite.swift 直接在数据库上生成的 sql 确认了这一点。

于 2016-04-05T18:51:15.103 回答