2011-07-31 65 views
0

我試着做這樣的事情(這是MySQL的格式)的Android SQLite的查詢多個表

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 

所以,我在另一個表存儲在一個表中的問題,然後類別。我建立了關係表,以便問題可以分爲多個類別。所以說,一個問題有5一個id,其在3級不同的類別,關係表是這樣的

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

所以,說我想要得到所有的1 CAT_ID的問題,我應該得到2結果。這基本上就是我想要做的。

回答

2

如果你想用1 cat_id所有問題,那麼你想這樣的:

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

我已經切換到ANSI連接語法而不是在WHERE子句中暗示連接條件,因爲顯式版本有助於避免某些類型的錯誤;特別是,ANSI加入有助於避免意外的交叉產品,這就是您的「MySQL格式」查詢的原因,因爲您忽略了包含category的加入條件。那意外的交叉產品幾乎肯定是你的「返回每個項目3次」問題的根源。

+0

我糾正了我的語法。我現在工作得很好。 – Shaun

+0

我在找的是聲明讓這在Android的SQLite中工作。 – Shaun

+0

@Shaun:您可能正在尋找['rawQuery'](http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#rawQuery(java.lang.String,%20java.lang .String []))在android.database.sqlite.SQLiteDatabase(或其朋友之一)。 –

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 

一些像這樣的事情會去的伎倆