![](/img/trans.png)
[英]How to retrieve the result of a select query in Sqlite java android?
[英]Android java SELECT SQLite
我創建了此查詢,該查詢從2個表中獲取數據。 但是似乎g.filed_1被添加並相乘,因為例如,如果g.filed_1的總和為20,則查詢返回40。也許存在語法錯誤? 謝謝
private void calc() {
SQLiteDatabase db = mHelper.getReadableDatabase();
String tab = "SELECT SUM(c.field_init), SUM(g.filed_1), SUM(g.field_2) FROM Cserv c, Bserv g";
Cursor c = db.rawQuery(tab, null);
if (c.moveToNext()) {
sumfield_init = c.getDouble(0);
sumfield_1 = c.getDouble(1);
sumfield_2 = c.getDouble(2);
...
}
c.close();
db.close();
}
您未指定如何聯接表。 因此,查詢生成Cserv
和Bserv
記錄的所有可能組合。 您獲得兩倍的總和表示另一個表僅包含兩個記錄。
通常,每個表中的一列在JOIN結果中應具有相同的值。 假設這些列分別稱為x
和y
,則可以通過以下方式指定它:
SELECT SUM(c.field_init), SUM(g.filed_1), SUM(g.field_2) FROM Cserv c JOIN Bserv g
ON c.x = g.y
specify the column names as i did below
private void calc() {
SQLiteDatabase db = mHelper.getReadableDatabase();
String tab = "SELECT SUM(c.field_init), SUM(g.filed_1), SUM(g.field_2)
FROM Cserv c.KEY FROM THIS TABLE JOIN Bserv g.KEY FROM Bserv";
Cursor c = db.rawQuery(tab, null);
if (c.moveToNext()) {
sumfield_init = c.getDouble(0);
sumfield_1 = c.getDouble(1);
sumfield_2 = c.getDouble(2);
...
}
c.close();
db.close();
}
問題是表沒有相等的字段。 則不能應用字段的並集。 -用戶3160725
如果要在一個查詢中使用單個總和,則可以將單獨的查詢合並為一個查詢, 而無需在兩個表之間執行JOIN
。 有很多方法可以做到這一點,您可以選擇最合適的方法:
各個總和如下:
SELECT SUM(c.field_init) FROM Cserv c; --x
SELECT SUM(g.filed_1) FROM Bserv g; --y
SELECT SUM(g.field_2) FROM Bserv g; --z
方法1.您可以將它們合並為主查詢中的子查詢:
SELECT
(SELECT SUM(c.field_init) FROM Cserv c),
(SELECT SUM(g.filed_1) FROM Bserv g),
(SELECT SUM(g.field_2) FROM Bserv g);
在這里,您將在子查詢中獲得每個總和作為主查詢中的一列。 請注意,每個子查詢必須只有一列和一行。
x y z
方法2。您可以通過匯總來合並它們:
SELECT SUM(sum1), SUM(sum2), SUM(sum3) FROM (
(SELECT SUM(c.field_init) AS sum1, 0 AS sum2, 0 AS sum3 FROM Cserv c)
UNION ALL
(SELECT 0, SUM(g.filed_1), SUM(g.field_2) FROM Bserv g)
);
在這里,您正在子查詢中獲得此表:
sum1 sum2 sum3
x 0 0
0 y z
並在主查詢中求和:
sum1 sum2 sum3
x y z
方法3。您可以執行聯合:
SELECT SUM(c.field_init) FROM Cserv c
UNION ALL
SELECT SUM(g.filed_1) FROM Bserv g
UNION ALL
SELECT SUM(g.field_2) FROM Bserv g;
在這種情況下,總和將在單獨的行中,但在單個列中。 您將必須修改程序邏輯以分別讀取每行並正確分配它們。
x
y
z
方法3僅在保證行順序的情況下才能工作。 為了保證,您可以改為執行以下操作:
SELECT 1, SUM(c.field_init) FROM Cserv c
UNION ALL
SELECT 2, SUM(g.filed_1) FROM Bserv g
UNION ALL
SELECT 3, SUM(g.field_2) FROM Bserv g;
導致:
1 x
2 y
3 z
這樣就可以確定,當第一g.filed_1
2
,第二列攜帶g.filed_1
和,依此類推。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.