2014-02-21 98 views
0

我在我的SQLite數據庫一個兩個表是一切(main)的表,另一種是「收藏夾」表(favorites),我想加載我ListView一個Cursor,有一個明星如果它在favorites中變灰或呈黃色。兩個表具有完全相同的列和我希望加載與這些列的Cursor和一個附加列favorite,可以是一個布爾或一個1或0。喜愛行簡單地從main表中複製,所以它的內容將是一樣。然後,當明星被竊聽,更新favorites表,並打電話給我的適配器上notifyDataSetChanged(),並且應該更新ListViewSQLite的兩個表的匹配邏輯

我試過使用JOIN和裝載表AS別名,但我有麻煩。任何人都可以幫助我用SQLite查詢來實現這一目標嗎?謝謝!

回答

0

使用LEFT JOIN我已經能夠實現我想要的並在favorites表中添加了一列is_fav

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

添加該列可能看起來很奇怪,但在別的地方使用它。

0

您可以使用select這樣

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在你的主表。

+0

非常感謝您的解決方案,但它不適合我。它只是返回共同的項目,我想讓這些共同的項目有一個新的列,其中有一個真正的和不真實的。然而,你確實指出了我與ISNULL正確的方向。我用UNION ALL和兩個SELECT調用來獲得我想要的。謝謝! – chis54

+0

哦,我正在複製整個行,因爲該表也在其他情況下使用。 – chis54

+0

@ chis54其實我現在意識到你完全正確的查詢只返回共同的行。爲了讓所有項目返回(不僅是共同的項目),你必須做一個「外部聯接」(它可以是一個正確的連接或一個左連接)。 – Merlevede