SQLite.swift 执行左连接并使用数据
SQLite.swift performing a left join and using the data
我正在尝试执行左连接
SELECT TProgram.ProgramName, TProgram.ProgramPath From TProgram
LEFT JOIN TIcons ON TIcons.ProgramName = TProgram.ProgramName
WHERE TIcons.ProgramName IS NULL
GROUP BY TProgram.ProgramName
和 swift。所以我做了以下。
let program = db["TProgram"]
let icons = db["TIcons"]
let programNameDB = Expression<String>("ProgramName")
let programNameDBI = Expression<String>("ProgramName")
let programPathDB = Expression<String>("ProgramPath")
let all = program.select(programNameDB, programPathDB).join(Query.JoinType.LeftOuter, icons, on: programNameDB == icons[programNameDBI]).filter(programNameDBI == "").group(programNameDB)
我无法检查它是否正常工作,因为以下结果会导致 fatal error: ambiguous column name:
let item = all.first!
let arr = Array(all)
如果我尝试 println(all)
,我可以在调试控制台中看到 "TProgram"。
我如何访问数据?
更新
我尝试了以下。错误消失了,但似乎没有任何价值在那里。
func readTProgramNames() -> (Query){
let program = db["TProgram"]
let icons = db["TIcons"]
let programNameDB = Expression<String>("ProgramName")
let programNameDBI = Expression<String>("ProgramName")
let programPathDB = Expression<String>("ProgramPath")
let all = program
.select(program[programNameDB], program[programPathDB])
.join(.LeftOuter, icons, on: program[programNameDB] == icons[programNameDBI])
.filter(icons[programNameDBI] == "")
.group(program[programNameDB])
let item = all.first!
println(item[program[programNameDB]])
return all
}
知道了。 String?
很重要,.leftouter
func readTProgramNames(){
let program = db["TProgram"]
let icons = db["TIcons"]
let programNameDB = Expression<String?>("ProgramName")
let programNameDBI = Expression<String?>("ProgramName")
let programPathDB = Expression<String?>("ProgramPath")
//let all = table.select(programNameDB, programPathDB).group(programNameDB)
//let all = program.join("LEFT OUTER", icons, on: programNameDB == icons[programNameDBI])
let all = program
.select(program[programNameDB], program[programPathDB])
.join(.LeftOuter, icons, on: program[programNameDB] == icons[programNameDBI])
.filter(icons[programNameDBI] == nil)
.group(program[programNameDB])
for item in all{
println("programName: \(item[program[programNameDB]]!)")
}
}
我正在尝试执行左连接
SELECT TProgram.ProgramName, TProgram.ProgramPath From TProgram
LEFT JOIN TIcons ON TIcons.ProgramName = TProgram.ProgramName
WHERE TIcons.ProgramName IS NULL
GROUP BY TProgram.ProgramName
和 swift。所以我做了以下。
let program = db["TProgram"]
let icons = db["TIcons"]
let programNameDB = Expression<String>("ProgramName")
let programNameDBI = Expression<String>("ProgramName")
let programPathDB = Expression<String>("ProgramPath")
let all = program.select(programNameDB, programPathDB).join(Query.JoinType.LeftOuter, icons, on: programNameDB == icons[programNameDBI]).filter(programNameDBI == "").group(programNameDB)
我无法检查它是否正常工作,因为以下结果会导致 fatal error: ambiguous column name:
let item = all.first!
let arr = Array(all)
如果我尝试 println(all)
,我可以在调试控制台中看到 "TProgram"。
我如何访问数据?
更新 我尝试了以下。错误消失了,但似乎没有任何价值在那里。
func readTProgramNames() -> (Query){
let program = db["TProgram"]
let icons = db["TIcons"]
let programNameDB = Expression<String>("ProgramName")
let programNameDBI = Expression<String>("ProgramName")
let programPathDB = Expression<String>("ProgramPath")
let all = program
.select(program[programNameDB], program[programPathDB])
.join(.LeftOuter, icons, on: program[programNameDB] == icons[programNameDBI])
.filter(icons[programNameDBI] == "")
.group(program[programNameDB])
let item = all.first!
println(item[program[programNameDB]])
return all
}
知道了。 String?
很重要,.leftouter
func readTProgramNames(){
let program = db["TProgram"]
let icons = db["TIcons"]
let programNameDB = Expression<String?>("ProgramName")
let programNameDBI = Expression<String?>("ProgramName")
let programPathDB = Expression<String?>("ProgramPath")
//let all = table.select(programNameDB, programPathDB).group(programNameDB)
//let all = program.join("LEFT OUTER", icons, on: programNameDB == icons[programNameDBI])
let all = program
.select(program[programNameDB], program[programPathDB])
.join(.LeftOuter, icons, on: program[programNameDB] == icons[programNameDBI])
.filter(icons[programNameDBI] == nil)
.group(program[programNameDB])
for item in all{
println("programName: \(item[program[programNameDB]]!)")
}
}