2016-08-15 165 views
0

我已经编写了以下3个查询。但需要将其全部3个结合起来才能得到最终查询。SQL lite联合查询

查询1:获取2个日期之间的所有记录。

String selectQuery = "SELECT * FROM " + TABLE_ALL_RECORD_MAIN + " WHERE " + KEY_DATE + ">=" + fro + " AND " + KEY_DATE + "<=" + to + " OR " + OUTDATE + ">=" + fro + " AND " + KEY_OUTDATE + "<=" + to; 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

查询2:获取大于“from_amount”且小于“to_amount”的所有记录。

String selectQuery_amount = "SELECT * FROM " + TABLE_ALL_RECORD_MAIN + " WHERE " + KEY_AMOUNT + ">=" + from_amount + " AND " + KEY_AMOUNT + "<=" + to_amount; 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery_amount, null); 

查询3:获取所有与search_name匹配的记录。

String selectQuery_amount = "SELECT * FROM " + TABLE_ALL_RECORD_MAIN + " WHERE " KEY_NAME + " like '" + search_name + "'"; 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery_amount, null); 

Reqiured查询:

1-写查询它结合所有上述查询。

例如:从2014年5月5日到2015年9月8日的所有记录中,用户“杰克”的金额为50000到60000。

+0

在where子句之后,在所有查询之间相继添加'AND'。例如... ... where condition1 AND conditionw等等。 – 7geeky

回答

0

可以使用括号()AND字相结合的要求:

 String selectQuery =  "SELECT * FROM " + TABLE_ALL_RECORD_MAIN + " WHERE " + 
//first query 
" (" + KEY_DATE + ">=" + fro + " AND " + KEY_DATE + "<=" + to + " OR " + OUTDATE + ">=" + fro + " AND " + KEY_OUTDATE + "<=" + to + ") " 
+ " AND " + 
//second query 
" (" + KEY_AMOUNT + ">=" + from_amount + " AND " + KEY_AMOUNT + "<=" + to_amount + ") " 
+ " AND " + 
//third query 
" ( " + KEY_NAME + " like '" + search_name + "'" + ") "; 
    SQLiteDatabase db = getReadableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

,当然,不要忘了正确使用空格:)

+0

在上面查询4个整数(从,来自,from_amount,to_amount),如果任何一个不是它应该返回所有记录。我的意思是说,如果我只是传递名称,那么它应该返回所有记录的名称,不管日期和金额 –

+0

如果我只通过两个日期,那么它应该返回这两个日期之间的所有记录,不管名称和金额 –

+0

获取错误如果我没有任何上述值 –

0
String selectQuery = "SELECT * FROM " + TABLE_ALL_RECORD_MAIN + " WHERE "+ 
KEY_DATE + ">=" + fro + " AND " + KEY_DATE + "<=" + to + " OR " + OUTDATE + ">=" + fro + " AND " + KEY_OUTDATE + "<=" + to+"AND "+ 
KEY_AMOUNT + ">=" + from_amount + " AND " + KEY_AMOUNT + "<=" + to_amount+"AND "+ 
KEY_NAME + " like '" + search_name + "'"; 
SQLiteDatabase db = getReadableDatabase(); 
Cursor cursor = db.rawQuery(selectQuery, null); 

注意在"AND "关键字连接查询的查询中每行的结尾。作为一个旁注考虑使用getReadableDatabase()而不是getWritableDatabase()这只是一个查询,在这种情况下没有理由获得可写实例。

1
String selectQuery_amount = "SELECT * FROM " + TABLE_ALL_RECORD_MAIN + 
    " WHERE " KEY_NAME + " ='" + search_name + "' AND "KEY_DATE 
    +" BETWEEN "+fro +" AND "+ to +" AND "+ KEY_AMOUNT +"BETWEEN " 
    +from_amount +" AND "+to_amount; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery_amount, null); 

    //Date format would be like this 
    SELECT * FROM test WHERE date BETWEEN "2011-01-11" AND "2011-8-11"