【问题标题】:SQLite.swift performing a left join and using the dataSQLite.swift 执行左连接并使用数据
【发布时间】:2017-04-30 00:15:59
【问题描述】:

我正在尝试执行左连接

SELECT TProgram.ProgramName, TProgram.ProgramPath From TProgram
LEFT JOIN TIcons ON TIcons.ProgramName = TProgram.ProgramName
WHERE TIcons.ProgramName IS NULL
GROUP BY TProgram.ProgramName

迅速。所以我做了以下。

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
}

【问题讨论】:

    标签: swift sqlite sqlite.swift


    【解决方案1】:

    知道了。 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]]!)")
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多