我想就通过连接字符串来生成聚合数据征求意见。如果我有一个列聚合,但是我想连接到一个聚合列中,那么在性能方面哪个更快?执行一个SQL,然后在代码中进行聚合。或者选择主数据,然后一次查询一个。
例如:
TABLE_A
COL_A_1 COL_A_2
A a
B b
C c
TABLE_B
COL_B_1 COL_B_2
a Text1
a Text2
a Text3
b Text4
b Text5
该表在col_a_2=col_b_1处联接,聚合列为col_b_2。
选项1
(做一个SQL)
SELECT TABLE_1.COL_A_1, TABLE_1.COL_A_2, TABLE_2.COL_B_2
FROM TABLE_A
LEFT OUTER JOIN TABLE_B ON TABLE_A.COL_A_2 = TABLE_2.COL_B_1
ORDER BY TABLE_1.COL_A_1
然后在代码中,对结果集进行循环,并聚合col_b_1。(使用Java的EX)
String oldColA1 = "";
InfoEntity currInfo = null;
for (InfoEntity info : infoList) {
if (!oldColA1.equals(info.colA1)) {
currInfo = info;
}
if (currInfo.colB2 == null || currInfo.colB2.equals("")) {
currInfo.colB2 = info.colB2;
} else {
currInfo.colB2 += info.colB2;
}
oldColA1 = info.colA1;
}
选项2
(执行多个SQL)
SELECT TABLE_1.COL_A_1, TABLE_1.COL_A_2
FROM TABLE_A
ORDER BY TABLE_1.COL_A_1
然后为每个代码选择(EX-Java)
for (InfoEntity info : infoList) {
// Select TableB entity based on info.colA2
...
tableBList = dao.selectTableB(info.colA2);
...
for (TableBEntity b : tableBList) {
info.colB2 += b.colB2;
}
}
我通常做选项1,因为我认为让多个SQL选择可能会很昂贵。但我对此不确定。但是有没有其他的方法来进行这种聚合呢?我已经搜索了网络,在标准的SQL中没有字符串串联聚合。而且,表A上的说明过于简化,通常表A是多个表连接在一起的复杂查询,表B也是如此。