我正在尝试建模两个表TableA和TableB之间的关系。 关系在它们自己的表RelationTable中列出,列为:ID,tableA_ID,tableB_ID。
为了确保TableA_ID和TableB_ID的每个组合都是唯一的,我添加了一个" unique(tableA_ID,tableB_ID)"在"创建表"言。
此外,RelationTable中的每一行都可以属于一个组(在具有列ID和groupName的GroupTable中)。
现在我想更新我的RelationTable。我有一个TableA和TableB的匹配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
)