SQLite两个表匹配逻辑

时间:2014-02-21 17:29:15

标签: android sql sqlite cursor

我的SQLite数据库中有两个表,一个是所有内容的表(main),另一个是“收藏夹”表(favorites),我想加载一个Cursor对于我的ListView,如果它在favorites中,则会显示为灰色或黄色。两个表都具有完全相同的列,我希望加载带有这些列的Cursor和一个可以是布尔值或1或0的附加列favorite。最喜欢的行只是从main表,所以它的内容是一样的。然后,当点击星标时,更新favorites表并在我的适配器上调用notifyDataSetChanged(),这应该更新ListView

我尝试使用JOIN并使用AS别名加载表但我遇到了麻烦。任何人都可以帮助我使用SQLite查询来实现这一目标吗?谢谢!

2 个答案:

答案 0 :(得分:0)

你可以使用像这样的选择

SELECT M.FieldA, M.FieldB,... M.Fieldx,  
FROM MainTable AS M JOIN Favorites as F 
ON M.Id = F.Id;

在此示例中,Id是匹配字段。另外,你可以用isnull(M.Fieldx,'something')或任何其他函数替换M.FiledX。但是,基本上如果M.Fieldx返回null,那么它不在收藏夹中。

另外值得一提的是,在收藏夹表中,您不需要复制该行,只需在主表中保存记录的ID即可。

答案 1 :(得分:0)

使用LEFT JOIN我已经能够达到我想要的效果,并在is_fav表格中添加了一列favorites

SELECT M.*, F.is_fav
FROM main AS M
LEFT JOIN favorites AS F ON M.title = F.title

添加该列可能看起来很奇怪,但在其他地方使用它。