2016-08-15 8 views
0

私は以下の3つのクエリを書いていました。しかし、最終クエリを得るために3つすべてを組み合わせる必要があります。SQL lite combineクエリ

クエリ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年4月5日から2015年8月9日までのすべてのレコードを、ユーザー「Jack」の金額50000〜60000で取得する。

+0

where節以降のすべてのクエリの間に「AND」を追加します。例えば、...条件1および条件wなど。 – 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つの整数のうち、(fro、to、from_amount、to_amount)のいずれかが存在しない場合は、すべてのレコードを返す必要があります。つまり、名前を渡すだけであれば、日付に関係なくその名前ですべてのレコードを返す必要があります。と額 –

+0

私は2つの日付を渡す場合は、名前と量にかかわらず、その2つの日付の間にすべてのレコードを返す必要があります –

+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 "キーワードに注意してください。クエリーを連結するクエリーの各行の終わり。脇役として、getWritableDatabase()の代わりにgetReadableDatabase()を使用することを検討します。これは単なるクエリです。この場合、書き込み可能なインスタンスを取得する理由はありません。

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" 
関連する問題