2011-07-31 6 views
0

Im essayant de faire quelque chose comme ça (ce qui est le format MySQL)requête Android SQLite plusieurs tables

SELECT q.question_id, q.question, q.answer 
FROM relationship r, questions q 
WHERE r.cat_id =1 
AND r.question_id = q.question_id 
LIMIT 0 , 30 

Alors, je me suis des questions stockées dans une table, puis catégories dans une autre table. J'ai mis en place la table de relation afin qu'une question puisse être dans plusieurs catégories. Donc, dire une question a un id 5, et son en 3 catégories différentes, la table de relation ressemblerait à ceci

relation_id, question_id, category_id 
    1   5   1 
    2   5   2 
    3   5   3 
    4   6   1 

Alors, dire que je veux obtenir toutes les questions avec cat_id de 1, je devrais obtenir 2 résultats. C'est essentiellement ce que j'essaie de faire.

Répondre

2

Si vous voulez toutes les questions avec cat_id de 1, alors vous voulez ceci:

select q.question, q.answer 
from questions q 
join relationship r on q.question_id = r.question_id 
where r.cat_id = 1 

J'ai passer à la syntaxe de jointure ANSI plutôt que des conditions de jointure implicites dans la clause WHERE car la version explicite permet d'éviter certains types d'erreurs; En particulier, les jointures ANSI aident à éviter les produits interactifs accidentels et c'est ce que votre requête "format MySQL" a parce que vous avez négligé d'inclure une condition de jointure pour category. Ce produit croisé accidentel est presque certainement la source de votre problème "renvoie chaque article 3 fois".

+0

J'ai corrigé ma syntaxe. Ce que j'ai fonctionne bien maintenant. – Shaun

+0

Ce que je cherche est la déclaration pour obtenir ce travail dans SQLite dans Android cependant. – Shaun

+0

@Shaun: Vous recherchez probablement ['rawQuery'] (http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#rawQuery (java.lang.String,% 20java.lang .String [])) dans android.database.sqlite.SQLiteDatabase (ou l'un de ses amis). –

1
SELECT q.question, q.answer 
FROM questions q 
left join category c on q.catID = c.catID 
left join relationship r on q.relID = r.relID 

quelque chose comme cela dé l'affaire