我正在使用具有CursorAdapter的ListView,并且查询通过LoaderManager完成到我的ContentProvider。一切似乎工作正常,但当我尝试使用相同的表执行多个查询时,我得到一个重复的列错误:
表评级:
CREATE TABLE rating ( _id INTEGER PRIMARY KEY, message TEXT NOT NULL,
from_user_id INTEGER NOT NULL, to_user_id INTEGER NOT NUL);
表用户:
CREATE TABLE users ( _id INTEGER PRIMARY KEY, name TEXT NOT NULL,
avatar TEXT, GENDER TEXT);
QueryBuilder的:
queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setTables(rating LEFT JOIN users ON
rating.from_user_id = users._id LEFT JOIN users
ON rating.to_user_id = users._id );
有没有办法使用别名或任何类似的方法?
答案 0 :(得分:1)
是的,您可以使用as
关键字为表格设置别名。查看https://www.sqlite.org/syntax/join-clause.html和https://www.sqlite.org/syntax/table-or-subquery.html。
您的加入条款如下所示:
rating LEFT JOIN users as from_users ON rating.from_user_id = from_users._id
LEFT JOIN users as to_users ON rating.to_user_id = to_users._id
实际上,您只需要为users
两次出现之一设置别名,但为两者设置别名会使其更易于阅读和理解。
请注意,您还需要为投影中的users
表格以及查询的所有其他部分(例如where
,order by
)添加前缀。
因此,鉴于您对两个用户(评级用户和评级用户)的用户名感兴趣,您的预测将如下所示:
new String[]{"from_users.name", "to_users.name"};