0

私のAndroidプロジェクトでいくつかのsqliteクエリを組み合わせるのに苦労しています。

この呼び出しでItemTableのすべての要素を取得しています

String sql = "SELECT n.*, p.ParentID "
           + "FROM NameTable n, "
           + "     ItemTable p "
           + "WHERE p.itemID = n.OwnerID "
           + "COLLATE NOCASE";

次に、次の2つのクエリのいずれかを使用して各親を取得します。

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 ";
}

これらの3つのクエリとロジックを1つに組み合わせる方法はありますか?呼び出しを組み合わせる方が速いと思いますが、それらを組み合わせる方法がわかりません。また、それらを組み合わせた場合に行を読み取る方法もわかりません。私は本当にいくつかのアドバイスと援助を使うことができました。

4

1 に答える 1

3

両方のクエリの結果を 1 つの結果セットに含めてもかまわない場合は、クエリ間に「UNION」を追加し、列名に「AS」を追加し、新しい列を追加することで、2 つのクエリを UNION できます。各クエリの結果を区別する

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 ";
于 2013-03-18T19:18:49.763 に答える