Supabase技术问询:如何筛选关联至少1位说唱流派艺人的曲目
解决Supabase中筛选关联至少一位说唱艺人的曲目问题
你的问题在于,原代码只是对返回的artists关联数据做了过滤,并不会排除那些没有说唱艺人的曲目——这类曲目依然会被返回,只是它们的artists字段会是空数组。
下面是两种可行的解决方案:
方案一:使用内连接(!inner)
通过!inner指定内连接,只会保留存在匹配条件(流派为rap)的艺人的曲目,直接过滤掉不符合要求的曲目:
const tracksWithAtLeast1RapArtist = await supabase .from("tracks") .select("name, id, artists!inner(genre)") .eq("artists.genre", "rap");
这种方式返回的曲目,其artists数组只会包含流派为rap的艺人。
方案二:使用exists子查询
如果需要保留曲目关联的所有艺人信息,同时确保曲目至少有一位说唱艺人,可以用exists子查询:
const tracksWithAtLeast1RapArtist = await supabase .from("tracks") .select("name, id, artists(genre)") .exists((q) => q .from("artists") .select("id") .eq("genre", "rap") .match({ track_id: "tracks.id" }) // 替换为你实际的外键字段名,比如artists表中关联tracks的字段名 );
注意要把track_id替换成你数据库中artists表关联tracks表的实际外键字段(比如如果外键叫track_fk就改成这个)。
内容的提问来源于stack exchange,提问作者Kishan Sripada
相关产品推荐
相关产品推荐

