是否可以在 sqlite.swift 中编写一个将生成等效 sql 的语句:
选择 foods.name, food_types.name FROM foods, food_types WHERE foods.type_id=food_types.id LIMIT 10;
我不知道如何一次从多个 Table 对象中查询。谢谢!
是否可以在 sqlite.swift 中编写一个将生成等效 sql 的语句:
选择 foods.name, food_types.name FROM foods, food_types WHERE foods.type_id=food_types.id LIMIT 10;
我不知道如何一次从多个 Table 对象中查询。谢谢!
您的原始查询将两个表传递给该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)
我想到了。外键是我要加入的所有表的列,但有一些外键成员在所有表中并不常见,所以我相信 sql 然后生成一个交叉连接和一个内连接......这导致查询中的所有额外行。我通过使用 sqlite.swift 直接在数据库上生成的 sql 确认了这一点。