Supabase中双eq()条件查询返回错误数据问题排查
问题分析与解决方案
你的查询逻辑错误在于:当前的.eq("curso.id", 5)和.eq("grupos_especialidades.id", 1)是分别对asignaturas关联的cursos和grupos_especialidades表做独立过滤,而非要求这两个关联属于同一个绑定关系。也就是说,只要某科目同时存在和课程5的关联、以及和专业组1的关联(哪怕这两个关联来自不同的连接记录),就会被查询出来——这就是asignatura_id=7被返回的原因。
正确查询写法
由于你存在关联三张表的连接表(假设名为asignaturas_cursos_grupos,结构包含asignatura_id、curso_id、grupo_especialidad_id),需要通过这个连接表关联三个实体,确保过滤条件作用在同一个连接记录上:
写法一:从连接表出发查询
let query = supabase .from("asignaturas_cursos_grupos") .select(` asignaturas ( * ), cursos ( id ), grupos_especialidades ( id ) `) .eq("curso_id", 5) .eq("grupo_especialidad_id", 1); const { data, error } = await query; return { data, error };
写法二:从asignaturas表出发,通过连接表做绑定关联
let query = supabase .from("asignaturas") .select(` *, asignaturas_cursos_grupos!inner ( cursos!inner ( id ), grupos_especialidades!inner ( id ) ) `) .eq("asignaturas_cursos_grupos.cursos.id", 5) .eq("asignaturas_cursos_grupos.grupos_especialidades.id", 1); const { data, error } = await query; return { data, error };
这两种写法都会确保只有当某科目通过同一个连接记录同时关联课程5和专业组1时,才会被返回,符合你预期的逻辑。
内容的提问来源于stack exchange,提问作者petoma
相关产品推荐
相关产品推荐

