2015-04-04 1 views
1

J'ai deux tables. Dans ces tables, mon identifiant d'arrêt peut être dans l'un d'entre eux ou les deux. Si mon ID d'arrêt n'existe pas dans B, il doit choisir parmi A. Et s'il n'existe pas dans A, il doit choisir dans B. Et si l'ID d'arrêt existe dans les deux tables, je veux donner la priorité à B et récupérer la ligne B. La requête ci-dessous renvoie toujours la valeur de B. Pouvez-vous m'aider à résoudre ce problème?Comment donner la priorité à une table dans Sqlite

String selectQuery = "SELECT " 
    + stop_id + "," 
    + name + "," 
    + latitude + "," 
    + longitude + "," 

    +"1 as "+priority 
    +" FROM "+ A 

    +" UNION SELECT " 
    + stop_id + "," 
    + name + "," 
    + latitude + "," 
    + longitude + "," 
    +"2 as "+priority 
    +" FROM "+ B 
    +" WHERE " + stop_id + " =? " 
    +" ORDER BY "+priority 
    +" LIMIT 1 "; 


    Cursor cursor = db.rawQuery(selectQuery, new String[] {id}); 

Répondre

1

Dans votre UNION ALL vous devez appliquer la clause WHERE aux deux SELECT s; votre code actuel applique la condition uniquement au côté B, tandis que le côté A renvoie toutes les lignes. À la fin, cache ce problème, cependant.

concaténation String ne rend pas facile de voir, mais vous devriez être passer id deux fois, et en utilisant deux ? espaces réservés dans votre requête:

SELECT stop_id, name, latitude, longitude, 1 as priority 
FROM A 
WHERE stop_id = ? 
UNION ALL 
SELECT stop_id, name, latitude, longitude, 2 as priority 
FROM B 
WHERE stop_id = ? 
ORDER BY priority DESC 
LIMIT 1 
+0

Je viens de comprendre cela et suis venu pour dire cela, mais je vous remercie pour ta réponse. =) –