Supabase JavaScript Client是否支持SQL EXISTS子句等价写法?
在Supabase JavaScript Client中实现NOT EXISTS等价查询
Supabase JS Client基于PostgREST构建,虽然没有直接对应SQL中EXISTS/NOT EXISTS的专属查询方法,但可以通过两种方式实现你要的“查询不属于任何群组的用户”效果:
方法1:使用not结合子查询的in过滤
利用PostgREST支持子查询作为in参数的特性,先获取所有存在于群组关联表中的用户ID,再筛选不在该集合内的用户:
const { data: usersWithoutGroups, error } = await supabase .from('users') .select('*') .not('id', 'in', '(SELECT user_id FROM users_groups)')
方法2:直接执行原生SQL
如果更习惯原生SQL的写法,可以通过Supabase的sql方法直接执行原查询,或者在where子句中嵌入完整的NOT EXISTS条件:
方式A:使用supabase.sql执行完整SQL
const { data: usersWithoutGroups, error } = await supabase.sql` SELECT * FROM users u WHERE NOT EXISTS (SELECT 1 FROM users_groups ug WHERE ug.user_id = u.id) `
方式B:在查询构建器的where中嵌入条件
const { data: usersWithoutGroups, error } = await supabase .from('users') .select('*') .where('NOT EXISTS (SELECT 1 FROM users_groups ug WHERE ug.user_id = users.id)')
这两种方式都能实现和你给出的SQL完全等价的效果,且都是Supabase官方支持的用法。
内容的提问来源于stack exchange,提问作者Fredaroo
相关产品推荐
相关产品推荐

