You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Supabase-js嵌套查询:关联Voting、Result与Club表数据获取

Supabase嵌套查询实现关联表数据获取

Supabase完全支持嵌套查询(nested selects),和Prisma的includes逻辑类似,只需基于PostgreSQL的外键关联,通过supabase-js的select方法即可实现多层关联数据的获取。

前提:确保外键关系已建立

首先需要在三张表间正确设置外键约束,Supabase依赖外键识别表关联:

  • Voting表的result_id → 关联Result表的id
  • Result表的club_id → 关联Club表的id

你可以在Supabase控制台的「表编辑器」中添加外键,或通过SQL语句创建:

-- 给Voting表添加外键
ALTER TABLE "Voting" ADD CONSTRAINT "Voting_result_id_fkey" FOREIGN KEY ("result_id") REFERENCES "Result"("id");

-- 给Result表添加外键
ALTER TABLE "Result" ADD CONSTRAINT "Result_club_id_fkey" FOREIGN KEY ("club_id") REFERENCES "Club"("id");

实现嵌套查询

1. 获取Voting+关联的Result数据

通过在select中嵌套关联表的字段,即可一次性获取关联数据:

const { data: votings, error } = await supabase
  .from('Voting')
  .select(`
    id,
    title,
    -- 通过外键result_id关联Result表,取别名Result(可选,便于识别)
    Result:result_id (
      id,
      yes,
      no
    )
  `);

// 处理结果
if (error) console.error('查询失败:', error);
else console.log('带Result的Voting数据:', votings);

2. 获取Voting+Result+Club的多层嵌套数据

继续嵌套Club表的字段,实现三层关联数据获取:

const { data: votings, error } = await supabase
  .from('Voting')
  .select(`
    id,
    title,
    Result:result_id (
      id,
      yes,
      no,
      -- 通过外键club_id关联Club表
      Club:club_id (
        id,
        name
      )
    )
  `);

// 返回的数据结构示例:
// [
//   {
//     "id": 1,
//     "title": "Voting title 1",
//     "Result": {
//       "id": 1,
//       "yes": 300,
//       "no": 406,
//       "Club": { "id": 1, "name": "Club A" }
//     }
//   }
// ]

3. 带筛选条件的嵌套查询

如果需要过滤特定数据(比如只获取Club A的投票),可以直接在查询中添加条件:

const { data: votings, error } = await supabase
  .from('Voting')
  .select(`
    id,
    title,
    Result:result_id (
      id,
      yes,
      no,
      Club:club_id (
        id,
        name
      )
    )
  `)
  .eq('Result.Club.name', 'Club A');

关键说明

  • 别名(如Result:result_id)是可选的,若外键字段名与关联表名逻辑对应,也可直接写result_id(...),但使用别名能让返回的数据结构更清晰。
  • 所有嵌套查询本质是PostgreSQL的JOIN操作,Supabase通过语法糖简化了写法,性能与原生JOIN一致。

内容的提问来源于stack exchange,提问作者Philipp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 11:15:31