Latar Belakang
Saya memiliki proyek Android yang memiliki database dengan dua tabel: tbl_question
dan tbl_alternative
.
Untuk mengisi pandangan dengan pertanyaan dan alternatif, saya menggunakan kursor. Tidak ada masalah dalam mendapatkan data yang saya perlukan sampai saya mencoba menggabungkan kedua tabel tersebut.
Tbl_question ------------- _Indo pertanyaan categoryid
Tbl_alternative --------------- _Indo questionid categoryid alternatif
Saya ingin sesuatu seperti berikut ini:
SELECT tbl_question.question, tbl_alternative.alternative where
categoryid=tbl_alternative.categoryid AND tbl_question._id =
tbl_alternative.questionid.`
Ini adalah usaha saya:
public Cursor getAlternative(long categoryid) {
String[] columns = new String[] { KEY_Q_ID, KEY_IMAGE, KEY_QUESTION, KEY_ALT, KEY_QID};
String whereClause = KEY_CATEGORYID + "=" + categoryid +" AND "+ KEY_Q_ID +"="+ KEY_QID;
Cursor cursor = mDb.query(true, DBTABLE_QUESTION + " INNER JOIN "+ DBTABLE_ALTERNATIVE, columns, whereClause, null, null, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
}
return cursor;
Saya menemukan cara ini untuk membentuk kueri lebih sulit daripada SQL biasa, tetapi telah mendapat saran untuk menggunakan cara ini karena tidak terlalu rentan terhadap kesalahan.
Pertanyaan
Bagaimana cara menggabungkan dua tabel SQLite dalam aplikasi saya?
Jawaban:
Anda membutuhkan metode rawQuery .
Contoh:
Gunakan? binding alih-alih memasukkan nilai ke dalam kueri sql mentah.
sumber
VIEW
opsi yang lebih baik daripadarawQuery
?Cara alternatif adalah dengan membuat tampilan yang kemudian dikueri seperti tabel. Di banyak manajer database menggunakan tampilan dapat menghasilkan kinerja yang lebih baik.
Ini dari memori jadi mungkin ada beberapa masalah sintaksis. http://www.sqlite.org/lang_createview.html
Saya menyebutkan pendekatan ini karena Anda dapat menggunakan SQLiteQueryBuilder dengan tampilan seperti yang Anda maksudkan bahwa itu lebih disukai.
sumber
rawQuery()
merupakan jawaban yang tepat.Selain jawaban @ pawelzieba yang pasti benar untuk menggabungkan dua tabel, sementara Anda dapat menggunakan
INNER JOIN
seperti inimelalui kueri mentah seperti ini -
karena dukungan SQLite yang kompatibel dengan cara primitif dalam membuat kueri, kami mengubah perintah itu menjadi ini -
dan karenanya dapat mengambil advanatage dari metode helper SQLiteDatabase.query ()
Untuk posting blog rinci, periksa http://blog.championswimmer.in/2015/12/doing-a-table-join-in-android-without-using-rawquery
sumber
android.database.sqlite.SQLiteException: ambiguous column name
"Kolom ambigu" biasanya berarti nama kolom yang sama muncul di setidaknya dua tabel; mesin database tidak tahu mana yang Anda inginkan. Gunakan nama tabel lengkap atau alias tabel untuk menghilangkan ambiguitas.
Inilah contoh yang kebetulan saya miliki di editor saya. Itu dari masalah orang lain, tapi tetap masuk akal.
sumber