我有一个简单的 Note 表和一个具有隐式多对多关系的 Tag 表。
model Tag {
id Int @id @default(autoincrement())
tag String @unique
notes Note[]
}
model Note {
id Int @id @default(autoincrement())
note String @unique
tags Note[]
...
}
当我删除一个笔记,我想删除的标签,这是只有在该笔记。我写道:
await prisma.tag.deleteMany({
where: {
notes: { none: { tags: { some: { tag: { in: tags } } } } }, // tags: string[] coming from deleted note
},
});
但它给了我错误:
ConnectorError(ConnectorError { user_facing_error: None, kind: QueryError(Server(ServerError { code: 1093, message: "You can't specify target table 'Tags' for update in FROM clause", state: "HY000" })) })
但是当我把它修改成findMany时,它找到它们没有任何问题。问题是什么?
目前我正在对findMany中的数据运行另一个deleteMany。我读到在纯SQL中可以用另一个SELECT将其 Package 起来,但是在prisma中我可以做些什么呢?
1条答案
按热度按时间zujrkrfu1#
我找了很多才找到这个。
你的问题是来自mysql,我尝试与postgresql,我不能重现它.
但碰巧有个解决办法。
新的prisma查询如下所示:
EDIT实际上,如果您不希望任何未链接到笔记的标记,您只能
因为它会搜索所有没有注解链接的标签。唯一的问题是,它会检查
Tag
表中的所有标签,因此效率并不高为了解释更多
使用模拟表
Relationship Note / Tag
表格:Note
表格第一例
添加过滤器
notes: { none: {} }
时,您要求Prisma查找没有注解的每个标签,因此Relationship Note / Tag
表中没有关系因此,使用此筛选器查找多个:
tags
将包含id为Tag4
、Tag5
、Tag6
和Tag7
的标签,因为它们与任何注解都不相关第二种情况
当您执行
notes: { none: { note: 'a' } }
时,您要求Prisma查找没有note
值=a
的注解的任何标签因此,使用此筛选器查找多个:
tags
将包含除Tag1
和Tag2
之外的所有标记,这两个标记与Note1
相关,且note
值=a
结束编辑
“告诉你”"你没做你想做的事“
x1米20英寸
您要求搜索
tags
,其中笔记的标签中没有tags
所以如果你有这些关系
您删除
Note3
,然后使用此查询搜索Tag3
,链接到Note2的Tag3确实包含一些Tag3
,因此未删除,但Tag2没有包含一些Tag3
的注解,因此将其删除,对于Tag1
也是如此