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

Supabase多关联表OR查询:筛选含营业商铺/餐厅的商场

Supabase关联表多条件.or()查询解决方案

问题

现有三张关联表:malls、stores、restaurants,其中stores和restaurants通过mallId外键关联malls。需求是查询所有至少有1家营业(isOpen为true)的商铺或餐厅的商场,预期结果为Josh's Mall(因该商场内的PF Changs餐厅处于营业状态)。

在使用Supabase客户端代码查询时,遇到.or()条件无法同时指定两个关联表的问题:

  • 尝试代码1:
.from("malls")
.select("name, store!inner( isOpen ), restaurants!inner( isOpen )")
.or("store.isOpen.eq.true, restaurants.isOpen.eq.true")
  • 尝试指定单个关联表的代码:
.from("malls")
.select("name, stores!inner( isOpen ), restaurants!inner( isOpen )")
.or('isOpen.eq.true', { foreignTable: "stores" })

以上写法均无法同时添加restaurants表的条件,期望实现类似如下伪代码的逻辑:

.from("malls")
.select("name, stores!inner( isOpen ), restaurants!inner( isOpen )")
.or(
     .filter("stores.isOpen", "eq", true)
     .filter("restaurants.isOpen", "eq", true)
)

正确查询写法

方式1:字符串格式条件

直接在.or()中使用完整的关联表字段路径,结合!inner过滤无符合条件关联数据的商场:

const { data, error } = await supabase
  .from('malls')
  .select('name, stores!inner(isOpen), restaurants!inner(isOpen)')
  .or('stores.isOpen.eq.true, restaurants.isOpen.eq.true')

方式2:对象格式条件(可读性更强)

通过数组传入多个条件对象,每个对象指定对应关联表和判断条件:

const { data, error } = await supabase
  .from('malls')
  .select('name, stores!inner(isOpen), restaurants!inner(isOpen)')
  .or([
    { 'isOpen': { 'eq': true }, foreignTable: 'stores' },
    { 'isOpen': { 'eq': true }, foreignTable: 'restaurants' }
  ])

关键说明

  • !inner连接符会自动排除没有对应营业商铺/餐厅的商场,确保结果仅包含满足需求的记录。
  • 对象格式的.or()支持同时指定不同关联表的条件,每个条件通过foreignTable字段绑定对应的关联表,完美实现“商铺营业 或 餐厅营业”的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 07:15:36