2016-05-11 65 views
0

我試圖讓這個的Android SQLite的內部連接

enter image description here

我有2個表 - 表字(ID,姓名,翻譯)和WordSynonym表(synonym_id1,synonym_id2)。

我的所有單詞都會進入第一個表格,當我需要時,我通過第二個表格創建單詞之間的連接。

現在我需要使方法通過特定的id來獲取所有的同義詞。

爲此,我嘗試了這一點。

@Override 
public ArrayList<Word> getAllSynonymsByWord(int id) { 
    ArrayList<Word> synonyms = new ArrayList<>(); 
    Cursor c = database.rawQuery("select id, word, translation from " + WordsTable.TABLE_NAME + " inner join " + WordSynonymTable.TABLE_NAME + " on " + WordSynonymTable.COLUMN_WORD_ID + " = " + id, null); 
    c.moveToFirst(); 
    while (!c.isAfterLast()) { 
     Word s = new Word(); 
     s.setId(c.getInt(0)); 
     s.setName(c.getString(1)); 
     s.setTranslation(c.getString(2)); 
     synonyms.add(s); 
     c.moveToNext(); 
    } 
    c.close(); 
    return synonyms; 
} 

參數ID是我想使用ID = 2和id = 3返回詞語例如 我所需要的單詞(圖中ID = 1) 的ID,但這不能正常工作。

我應該改變什麼? 如果您需要代碼註釋的另一部分,我會添加。

回答

1

你需要加入的話表兩次:

SELECT W2.ID, 
     W2.Name, 
     W2.Translation 
FROM Words 
JOIN WordSynonym ON Words.ID = WordSynonym.Synonym_ID1 
JOIN Words AS W2 ON WordSynonym.Synonym_ID2 = W2.ID 
WHERE Words.ID = ?; 
+0

Okaay,但我在哪裏使用參數ID從方法,我想W2和詞應該是相同的。 –

+0

我已經改變了最後一部分 - WHERE words.id = id(id - 參數),它的工作原理,謝謝 –