Sql 如果不在列表中,请插入新行并删除旧行。
我试图在两个表TableA和TableB之间建立一个关系模型。 这些关系列在它们自己的表RelationTable中,列为:ID、tableA\u ID、tableB\u ID 为了确保TableA_ID和TableB_ID的每个组合都是唯一的,我在CREATETABLE语句中添加了唯一的TableA_ID和TableB_ID 此外,RelationTable中的每一行都可以属于GroupTable中ID列和groupName列的组 现在我想更新我的RelationTable。我有一个表A和表B的匹配rowID的更新列表。我也知道这对情侣所属的群体 我可以插入新行,如果该行存在,则忽略插入Sql 如果不在列表中,请插入新行并删除旧行。,sql,sqlite,Sql,Sqlite,我试图在两个表TableA和TableB之间建立一个关系模型。 这些关系列在它们自己的表RelationTable中,列为:ID、tableA\u ID、tableB\u ID 为了确保TableA_ID和TableB_ID的每个组合都是唯一的,我在CREATETABLE语句中添加了唯一的TableA_ID和TableB_ID 此外,RelationTable中的每一行都可以属于GroupTable中ID列和groupName列的组 现在我想更新我的RelationTable。我有一个表A和表B
insert or ignore into RelationTable (tableB_ID,tableB_ID) values (:a,:b)
然后我获取insertedRowID并将其添加到GroupTable中。虽然这两个步骤可以在一个步骤中完成,但是否需要批量更新
但是如何删除RelationTable和GroupTable中不再有效的行?无效行是指其tableA_ID、tableB_ID对不在更新/或活动关系列表中,但在GroupTable中列出的行
我被这句话难住了。它没有考虑groupTable,我必须合并每一对值。这对于少量的对来说可能是好的,但是对于更多的对来说它会变得很难处理。这是前进的方向吗
delete from RelationTable where ID not in
(select RelationTable from RelationTable inner join
(select "aValue" as a, "aValue2" as b union all
select "anotherValue as a, "anotherValue2" as b
) as pair
on pair.a = RelationTable.tableA_ID and
pair.b = RelationTable.tableB_ID
)
什么是更新列表?更新列表是rowID目的地的数组。每个列表都有一个关联的源。示例list1:tableB的第11行指向tableA的第2、4、7行/List2:tableA的第2行指向tableB/etc的第11行。为什么不在插入新元素之前清空RelationTable DELETE?