如何用单条Prisma语句实现含NOT IN子查询的SQL统计逻辑?
可行,单条Prisma查询即可实现该逻辑
原SQL的核心是统计处于激活状态、且未被ID为2的学生完成的模拟测试数量,对应Prisma的实现如下:
假设你的Prisma Schema模型定义大致如下:
model MockTest { id Int @id @default(autoincrement()) isActive Boolean givenByStudents MockTestsGivenByStudent[] // 关联学生完成记录的关系字段 } model MockTestsGivenByStudent { id Int @id @default(autoincrement()) studentId Int mockTestId Int mockTest MockTest @relation(fields: [mockTestId], references: [id]) }
对应的单条Prisma查询代码:
const mockTestCount = await prisma.mockTest.count({ where: { isActive: true, givenByStudents: { none: { studentId: 2 } } } })
逻辑说明
count()方法直接对应原SQL的COUNT(*)isActive: true匹配原SQL的isActive = 1givenByStudents: { none: { studentId: 2 } }等价于原SQL的id NOT IN (...):Prisma会将这个条件转换为NOT EXISTS子查询,效果和原SQL一致,且在处理空值场景时更稳定。
内容的提问来源于stack exchange,提问作者Debabrata Roy
相关产品推荐
相关产品推荐

