2015-08-03 72 views
-2

下面是我的查詢的代碼,其中我目前正在傳遞100個記錄的DB表中存在的只有8個產品的ID。Android Sqlite查詢工會全部

String query = "SELECT productId IN (" + makePlaceholders(ids.length)+"),"+ " * FROM " + tableName + " WHERE type LIKE 'percent'" 
          + " UNION ALL " 
          + "SELECT productId IN (" + makePlaceholders(ids.length)+"),"+ " * FROM " + tableName + " WHERE type LIKE 'currency' ORDER BY cash DESC"; 
        cursor = dataBase.rawQuery(query, ids); 

我的問題是,它顯示了所有的記錄(即所有的100條記錄),而不是隻有8我從ID使用IN子句傳遞。 我希望通過現金顯示這8條記錄(或更多通過函數)ORDER

現在我應該如何編寫這個查詢來實現我的目標。

編輯: 我只用一個表來達到這個目的。

+2

簡單地說:你根本不知道SQL SELECT productId IN(...)'什麼? ...'類型LIKE'percent''(如果你不使用通配符,則不需要'like') – Selvin

+0

我不會使用'UNION ALL'(順便說一下,它也包含重複項) ,但使用'「SELECT * FROM」+ tableName +「WHERE類型IN('percent','category')AND productId IN(」+ makePlaceholders(ids.length)+「)」' –

+0

我的建議查詢是否有效?只是出於好奇。 –

回答

2

我從來沒有見過這樣的SQL:

SELECT productId IN (..) from ... where .... 

我希望看到

SELECT productId from ... where productId IN (..) and .... 
+0

完成你所說的之後,我收到以下消息:第1個ORDER BY項與結果集中的任何列不匹配。 – Abid

0

移動IN像下面的WHERE條款。

String query = "SELECT * FROM " + tableName + " WHERE type LIKE 'percent' AND " productId IN (" + makePlaceholders(ids.length)+"),"+ " 
          + " UNION ALL " 
          + "SELECT * FROM " + tableName + " WHERE type LIKE 'currency' AND productId IN (" + makePlaceholders(ids.length)+"),"+ " ORDER BY cash DESC"; 
        cursor = dataBase.rawQuery(query, ids); 
+0

這個人只返回3條記錄 – Abid

+0

你能否確認你正在查找的8條記錄的'type'列等於'percent'(因爲你的'like'語句中沒有通配符)在第一個表中,並且第二個'type'等於'currency'? – jradich1234

+1

也許發佈一些示例數據將有所幫助 – jradich1234