2012-06-14 14 views
11

Tôi có 2 bảng trong cơ sở dữ liệu của mình, ví dụ: Table1: id (PK), data1Table2: id (PK), id_table1 (FK), data2. Làm thế nào tôi có thể làm cho một truy vấn như thế:Truy vấn SQLite từ nhiều bảng bằng cách sử dụng SQLiteDatabase

SELECT * FROM Table1, Table2 WHERE Table1.id = Table2.id_table1 
GROUP BY Table1.data1 

Tôi đang sử dụng SQLiteDatabase và phương pháp query() của nó.

Cursor mCursor = db.query(true, new String[] {"Table1","Table2"}, 
new String[] {"Table1.id","data1", "Table2.id", "id_table1", "data2"}, 
"Table1.id=Table2.id_table1", null, "Table1.data1", null,null,null); 

Nhưng có vấn đề với arg thứ hai - chỉ có thể sử dụng String chứ không phải String [] (như new String[] {"Table1","Table2}). Tôi nên làm gì để thực hiện truy vấn từ nhiều bảng theo cách đó?

Trả lời

25

Hãy thử điều này:

Cursor mCursor = db.rawQuery("SELECT * FROM Table1, Table2 " + 
          "WHERE Table1.id = Table2.id_table1 " + 
          "GROUP BY Table1.data1", null); 
+0

@Graham làm thế nào để vượt qua id trong này –

12

Vì vậy, khi bạn cần phải JOIN Bàn, bạn phải sử dụng rawQuery thay vì query. Vì vậy, tuyên bố của bạn

String SELECT_QUERY = SELECT * FROM Table1 t1 INNER JOIN Table2 t2 ON t1.id = t2.id GROUP BY t1.data1; 

Tôi khuyên bạn nên bạn sử dụng JOIN vì nó nhanh hơn và an toàn hơn sau đó cách tiếp cận của bạn. Vì vậy, sau đó rawQuery phương pháp của bạn có thể trông như thế này:

cursor = db.rawQuery(SELECT_QUERY, null); 

Có nhìn vào rawQuery in SQLiteDatabase

Trân

Các vấn đề liên quan