我使用SQL.swift但是我找不到在连接期间从多个表中选择值的方法。我的数据库结构如下:
airport --* tower --* tower_frequency
机场可以有多个控制塔,每个控制塔可以有几个无线电频率。鉴于机场ident
,我想选择所有无线电频率。
我使用
构建查询let airportTable = Table("airport")
let uid = Expression<Double>("id")
let ident = Expression<String>("ident")
let towerTable = Table("tower")
let frequencyTable = Table("tower_frequency")
var query = airportTable
.select(airportTable[*], towerTable[*], frequencyTable[*])
.join(towerTable, on: airportTable[uid] == towerTable[fkAirportId])
.join(frequencyTable, on: towerTable[uid] == frequencyTable[fkTowerId])
.filter(airportTable[ident] == icao)
生成的SQL来自query.asSQL()
SELECT "airport".*, "tower".*, "tower_frequency".* FROM "airport"
INNER JOIN "tower" ON ("airport"."id" = "tower"."fk_airport_id")
INNER JOIN "tower_frequency"
ON ("tower"."id" = "tower_frequency"."fk_tower_id")
WHERE ("airport"."ident" = 'SBP')
在我在db中手动运行它时工作正常,但SQL.swift
抛出异常No such table: "tower"
答案 0 :(得分:0)
我发现当我在第三个表的第二个上使用星型查询frequencyTable[*]
时会发生这种情况。当我使用显式查询时,它可以工作
:.select(airportTable.table[*], frequenciesTable.table[frequencyCol])
我将在项目中打开一个错误