2016-05-11 14 views
0

Ich versuche, dieseAndroid SQLite Inner Join

enter image description here

Ich habe 2 Tabellen zu erhalten - Wörter Tabelle (ID, Name, TRANSLATION) und WordSynonym Tabelle (synonym_id1, synonym_id2).

Alle meine Wörter gehen in die erste Tabelle, und wenn ich brauche, erstelle ich eine Verbindung zwischen Wörtern über die zweite Tabelle.

Jetzt muss ich Methode machen, um alle Synonyme durch spezifische ID zu erhalten.

Dafür habe ich das versucht.

@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; 
} 

Parameter ID ist id des Wortes I (id = 1 in der Abbildung) müssen Ich mag Worte zurück mit id = 2 und id = 3 zum Beispiel aber das ist nicht richtig funktioniert.

Was soll ich ändern? Wenn Sie einen anderen Teil des Code Kommentar benötigen und ich werde hinzufügen.

Antwort

1

Sie müssen die Worte Tabelle zweimal verbinden:

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, aber wo verwende ich Parameter-ID von Methode und ich denke, W2 und Wörter sollten gleich sein. –

+0

Ich habe den letzten Teil geändert - WHERE words.id = id (id - Parameter) und es funktioniert, danke –