Supabase多外表!inner关联查询无返回行的问题及需求实现
解决方法
问题出在你用了内连接(!inner),而且把关联表的筛选条件放在了主查询的.eq()里——内连接要求两张关联表都有匹配数据才会返回主表行,主查询的eq又会把关联表为空的行直接过滤掉。要实现单条件满足就返回,得改成左外连接,并把筛选条件移到关联表的查询逻辑里:
修改后的代码:
const { data, error } = await supabase .from('profile') .select(` name, email, recommendations!left( id, title, url, date, type ):type=eq.rock, playlist!left( id, active, played, played_date ):active=eq.true `)
关键改动说明:
- 把
!inner换成!left:左外连接会保留所有profile数据,关联表没有匹配项时返回空数组 - 把
recommendations.type = 'rock'和playlist.active = true的筛选条件移到对应关联表的select语句末尾(用:字段=eq.值的语法):这样只会过滤关联表的返回结果,不会影响主表的行
如果需要确保返回的profile至少有一个符合条件的关联数据(要么有rock推荐,要么有活跃播放列表),可以再加一句.or('recommendations.id.is.not.null', 'playlist.id.is.not.null'),否则上面的代码会返回所有profile,哪怕两个关联表都没有符合条件的数据。
内容的提问来源于stack exchange,提问作者E G
相关产品推荐
相关产品推荐

