我正在努力在我的android项目中结合几个sqlite查询。
我通过此次调用获得了ItemTable的所有元素
String sql = "SELECT n.*, p.ParentID "
+ "FROM NameTable n, "
+ " ItemTable p "
+ "WHERE p.itemID = n.OwnerID "
+ "COLLATE NOCASE";
然后让他们的每个父母参与以下两个查询中的一个:
if (aItem.parentID > 0) {
sql = "SELECT n.*, p.ParentID, f.FamilyID "
+ "FROM NameTable n, "
+ " FamilyTable f, "
+ " ItemTable p "
+ "WHERE f.FamilyID = '" + aItem.parentID + "' "
+ " AND p.ItemID = n.OwnerID "
+ " AND (p.ItemID = f.MotherID OR p.itemID = f.FatherID) "
+ " AND n.IsPrimary = 1 ";
} else {
sql = "SELECT n.*, p.ItemID, f.FamilyID "
+ "FROM NameTable n, "
+ " FamilyTable f, "
+ " ChildTable c, "
+ " ItemTable p "
+ "WHERE c.ChildID = '" + aItem.ItemID + "' "
+ " AND p.ItemID = n.OwnerID "
+ " AND c.FamilyID = f.FamilyID "
+ " AND (p.ItemID = f.MotherID OR p.ItemID = f.FatherID) "
+ " AND n.IsPrimary = 1 ";
}
有什么方法可以将这三个查询和逻辑组合成一个?我认为组合调用会更快,但我不知道如何组合它们,并且如果我将它们组合起来也不确定如何读取行。我真的可以使用一些建议和帮助。
答案 0 :(得分:3)
如果您不介意在一个结果集中同时获得两个查询的结果,可以通过在查询之间添加“UNION”,同时在列名称中添加“AS”并添加来联合2个查询。一个新列,用于区分每个查询的结果
sql = "SELECT n.*, p.ParentID AS ID1, f.FamilyID, 1 AS RESULT_GROUP "
+ "FROM NameTable n, "
+ " FamilyTable f, "
+ " ItemTable p "
+ "WHERE f.FamilyID = '" + aItem.parentID + "' "
+ " AND p.ItemID = n.OwnerID "
+ " AND (p.ItemID = f.MotherID OR p.itemID = f.FatherID) "
+ " AND n.IsPrimary = 1 ";
sql += " UNION "
sql += "SELECT n.*, p.ItemID AS ID1, f.FamilyID AS ID2, 2 AS RESULT_GROUP "
+ "FROM NameTable n, "
+ " FamilyTable f, "
+ " ChildTable c, "
+ " ItemTable p "
+ "WHERE c.ChildID = '" + aItem.ItemID + "' "
+ " AND p.ItemID = n.OwnerID "
+ " AND c.FamilyID = f.FamilyID "
+ " AND (p.ItemID = f.MotherID OR p.ItemID = f.FatherID) "
+ " AND n.IsPrimary = 1 ";
同样在你的联接上,我会做一些事情(改善表现):
sql = "SELECT n.*, p.ParentID AS ID1, f.FamilyID, 1 AS RESULT_GROUP "
+ "FROM NameTable n "
+ "JOIN FamilyTable f ON f.FamilyID = '" + aItem.parentID + "' "
+ "JOIN ItemTable p ON p.ItemID = n.OwnerID"
+ "WHERE
+ " (p.ItemID = f.MotherID OR p.itemID = f.FatherID) "
+ " AND n.IsPrimary = 1 ";