2015-07-24 3 views
1

Je suis en train d'effectuer une jointure gaucheSQLite.swift effectuer une jointure gauche et en utilisant les données

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

avec rapide. J'ai donc fait ce qui suit.

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) 

je ne peux pas vérifier si elle fonctionne parce que les résultats suivants dans un fatal error: ambiguous column name:

let item = all.first! 
let arr = Array(all) 

Si j'essaie println(all) je peux voir « TProgram » dans la console de débogage.

Comment puis-je accéder aux données?

MISE À JOUR J'ai essayé ce qui suit. L'erreur a disparu, mais aucune valeur ne semble être là.

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 
} 

Répondre

2

Vous l'avez. Le String? était important et le .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]]!)") 
    } 
}