Android 如何获取具有相同列名的联接表的值?
MainActivity.java:Android 如何获取具有相同列名的联接表的值?,android,sql,sqlite,join,Android,Sql,Sqlite,Join,MainActivity.java: private void displayListView() { cursor = myDatabase.getJoinedInfo(etSearch.getText().toString()); String[] columns = new String[] { myDatabase.RE_VALUE, myDatabase.GL_VALUE, myDatabase.KE_VALUE }; int
private void displayListView() {
cursor = myDatabase.getJoinedInfo(etSearch.getText().toString());
String[] columns = new String[] { myDatabase.RE_VALUE,
myDatabase.GL_VALUE, myDatabase.KE_VALUE };
int[] to = new int[] { R.id.tvHiragana, R.id.tvMeaning, R.id.tvKanji };
dataAdapter = new SimpleCursorAdapter(this, R.layout.wordonlist,
cursor, columns, to, 0);
ListView listView = (ListView) findViewById(R.id.lvWordlist);
// Assign adapter to ListView
listView.setAdapter(dataAdapter);
}
MyDatabase.java:
public static final String GL_TABLE="gloss";
public static final String GL_ID="id";
public static final String GL_LANG="lang";
public static final String GL_VALUE="value";
public static final String KE_ID="id";
public static final String KE_VALUE="value";
public static final String RE_ID="id";
public static final String RE_VALUE="value";
public static final String LOG_TAG="myLogs";
public Cursor getJoinedInfo(String lookingFor)
{
Log.d(LOG_TAG, "DB: looking up info");
SQLiteDatabase db=getReadableDatabase();
Cursor cursor;
String query;
query="SELECT " +
" e.id AS _id," +
" ke.id AS _id," +
" ke.fk," +
" ke.value," +
" re.id AS _id," +
" re.fk," +
" re.value," +
" s.id AS _id," +
" s.fk," +
" g.id AS _id," +
" g.fk," +
" g.lang," +
" g.value" +
" FROM entry e" +
" INNER JOIN k_ele ke ON e.id = ke.fk" +
" INNER JOIN r_ele re ON e.id = re.fk" +
" INNER JOIN sense s ON e.id = s.fk" +
" INNER JOIN gloss g ON s.id = g.fk" +
" WHERE g.value like '%"+lookingFor+"%' LIMIT 20";
Log.d(LOG_TAG, "DB: query = \n" + query.replace(", ",",\n "));
cursor=db.rawQuery(query,null);
Log.d(LOG_TAG, "DB: query complete");
return cursor;
}
我有五张桌子。其中3个列的名称为“值”。游标只获取一个表的“值”,而忽略其他表的“值”。与搜索字符串匹配的所有值都是相似的!请就如何解决这个问题提出一些建议
关键字
的要点是为列指定另一个名称,该名称在所有检索到的列中是唯一的。您只在其中一些列上使用它,并且始终指定相同的列名。查询应该如下所示
query = "SELECT " +
" e.id AS e_id," +
" ke.id AS ke_id," +
" ke.fk as ke_fk," +
" ke.value as ke_value," +
" re.id AS re_id," +
" re.fk as re_fk," +
" re.value as re_value," +
" s.id AS s_id," +
" s.fk as s_fk," +
" g.id AS g_id," +
" g.fk as g_fk," +
" g.lang," +
" g.value as g_lang" +
" FROM entry e" +
" INNER JOIN k_ele ke ON e.id = ke.fk" +
" INNER JOIN r_ele re ON e.id = re.fk" +
" INNER JOIN sense s ON e.id = s.fk" +
" INNER JOIN gloss g ON s.id = g.fk" +
" WHERE g.value like '%"+lookingFor+"%' LIMIT 20";
这样,结果集中的每一列都将具有不同的名称。您还应该改进您的命名,因为像g、s、e、ke和re这样的名称没有任何意义,并且使代码难以阅读和理解。非常感谢。代码不起作用,但我理解AS和implemented的一般含义。我能再问一个问题吗?如何避免已联接表中的值重复?例如,当我搜索“girl”时,由于重复,它给出了5个结果(它有5种书写方式)。如何使光标只给出一个结果?另外,你可以在截图中看到它。一个意思,不同的书写(汉字)嗨,我在两个表上应用了InnerJoin。第一个表中的主键列在第二个表中是外来的。第二个表中有3行与外键关联,我已经设法创建了一个查询,但不知道如何读取光标,比如说在一个查询中有第一个表中的1行和第二个表中的3行。找到解决方案了吗?