2016-08-15 3 views
0

다음과 같은 3 가지 쿼리를 작성했습니다.하지만 3 가지를 모두 조합하여 최종 쿼리를 작성해야합니다.SQL lite combine Query

쿼리 1 : 두 날짜 사이의 모든 레코드를 가져 오려면.

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 : "to_amount"이 아닌 "from_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 AND 조건 등. – 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

인 경우 두 날짜 만 전달하면 이름과 금액에 관계없이 두 날짜 사이의 모든 레코드가 반환되어야합니다. –

+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 " 키워드에 쿼리의 각 줄 끝이 쿼리를 연결합니다. sidenote가 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"