Android 组合多个Sqlite查询

Android 组合多个Sqlite查询,android,sqlite,Android,Sqlite,我正在努力将一些sqlite查询合并到我的android项目中 我将通过此调用获取ItemTable的所有元素 String sql = "SELECT n.*, p.ParentID " + "FROM NameTable n, " + " ItemTable p " + "WHERE p.itemID = n.OwnerID " + "COLLATE NOCASE"; 然后,通过以下两个查询中的

我正在努力将一些sqlite查询合并到我的android项目中

我将通过此调用获取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 ";
}

有什么方法可以将这三个查询和逻辑组合成一个查询吗?我想象合并调用会更快,但我不确定如何合并调用,也不确定如果合并调用,如何读取行。我真的需要一些建议和帮助。

如果您不介意将两个查询的结果都放在一个结果集中,您可以通过在查询之间添加“UNION”,在列名中添加“AS”,并添加一个新列来区分每个查询的结果,从而将这两个查询合并在一起

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 ";
此外,在您的加入中,我将执行以下操作(提高性能):


如果您不介意将两个查询的结果放在一个结果集中,可以通过在查询之间添加“UNION”,在列名中添加“AS”,并添加一个新列来区分每个查询的结果,从而将两个查询合并在一起

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 ";
此外,在您的加入中,我将执行以下操作(提高性能):


有很多方法,但是如果你对数据库模式和查询的目的保密,没有人可以帮助你。有很多方法,但是如果你对数据库模式和查询的目的保密,没有人可以帮助你。谢谢Jeff,这才是我真正想要的。对不起,我的问题措辞不好。谢谢杰夫,这正是我想要的。对不起,我的问题措辞很糟糕。