如何从sqlite.swift中的多个表进行查询

时间:2016-04-04 20:25:22

标签: sqlite.swift

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

SELECT foods.name,food_types.name FROM foods,food_types 在哪里foods.type_id = food_types.id限制10;

我无法弄清楚如何一次从多个Table对象进行查询。 谢谢!

2 个答案:

答案 0 :(得分:3)

您的原始查询将两个表传递给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)

答案 1 :(得分:0)

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