Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果不在列表中,请插入新行并删除旧行。_Sql_Sqlite - Fatal编程技术网

Sql 如果不在列表中,请插入新行并删除旧行。

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

我试图在两个表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的更新列表。我也知道这对情侣所属的群体

我可以插入新行,如果该行存在,则忽略插入

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?