Prisma ORM如何通过客户端API实现关联表字段对比查询
Prisma跨关联表字段对比过滤实现说明
Prisma常规客户端查询语法不支持在嵌套关联where条件中动态对比两个关联表的字段值。你之前尝试的写法里,equals参数位仅支持传入固定常量、枚举值或固定筛选规则,无法引用同查询下其他关联表的动态字段值,因此无法通过这种嵌套写法实现需求。
可用实现方案
方案1:原生SQL查询(推荐,性能最优)
你当前使用的Prisma.sql原生查询是这类场景的官方推荐方案,你之前编写的join+字段对比SQL逻辑可直接使用,无需强行适配客户端API,能避免额外性能损耗。
方案2:通过$expr操作符实现字段对比
如果不希望编写原生SQL,可使用Prisma支持的$expr操作符,在表达式中直接对比两个关联表的字段,示例代码如下:
return await prisma.lesson.findMany({ // 按需配置是否返回关联的教师、课程数据 include: { Teacher: true, Course: true }, where: { $expr: { // ne对应SQL中的<>不等于逻辑 ne: [ // 引用关联字段需加$前缀,路径要和Prisma Schema中定义的关系名大小写保持一致 '$Course.department_id', '$Teacher.department_id' ] } } })
注意:
$expr对关联字段的引用依赖Prisma内置的关系嵌套查询逻辑,关联数据量较大时性能会低于手写join的原生SQL,不同数据库下也可能存在细微适配差异。
内容的提问来源于stack exchange,提问作者Hendrik Jan
相关产品推荐
相关产品推荐

