Android Sqlite内部加入

时间:2016-05-11 19:10:43

标签: java android sqlite

我正试图搞定这个

enter image description here

我有2个表 - 单词表(ID,NAME,TRANSLATION)和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(图片中id = 1) 我想返回id = 2和id = 3的单词 但这不能正常工作。

我应该改变什么? 如果你需要代码注释的另一部分,我会添加。

1 个答案:

答案 0 :(得分: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 = ?;