NodeJS 在父数据库中的连接中筛选

hwamh0ep  于 2023-01-16  发布在  Node.js
关注(0)|答案(6)|浏览(163)

我正在使用一个有2个表的数据库的supabase表是teachersusers。这两个表分别有IDid_teacher/id_user。我正在处理一个查询,需要获取所有教师,加入users表,其中有一个image列。我只需要得到teachers,其中user有一个非空image

const query = supabase.from(`teachers`).select(
      `
        *,
        id_user(
          image
        )
      `
    )

这个查询可以让教师加入用户表。因为我得到了我想要的响应。这是一个简短的例子。

{
    "id": 560,
    "teacher_experience": 9,
    "id_user":{
        "image": "example-image.jpg"
    }
}

问题是当我试图使用一些过滤器来避免nullimages时。

query.not('id_user.image', 'eq', null)
query.not('id_user.image', 'in', null)
query.ilike('id_user.image', 'null')

这只是一个过滤器的例子,我试图避免教师的user.image有一个值。因为,我不想得到整个项目,但我得到了一个项目与id_user = null

{
    "id": 560,
    "teacher_experience": 9,
    "id_user": null          // In this case image is null but still giving me the user
}

解决这个问题的正确形式是什么?

1bqhqjot

1bqhqjot1#

Just create在数据库中添加一个view来解决这个问题。view是查询的快捷方式,可以应用where子句。
在supbase https://app.supabase.io/project/{your_project_id}/editor/sql上的SQL编辑器中
创建具有联接的新视图;

CREATE VIEW teachers_view AS
SELECT
    t.*,
    iu.image as image
FROM teachers as t
LEFT JOIN id_user as iu WHERE t.id = iu.teacher_id;

在此阅读更多关于左连接的信息
并且在应用中

supabase.from('teachers_view').select().neq('image', null);
eulz3vhy

eulz3vhy2#

query.not("your_column_name", "is", "NULL")

为我工作!
如果您想检查NULL,这已经够奇怪的了

.filter("your_column_name", "is", "NULL")

似乎是解决方案。不知道为什么不一致

osh3o9ms

osh3o9ms3#

这是不可能的atm。你可以在这里看到问题的状态。有些可能是使用views在另一个表中启动查询。

laximzn5

laximzn54#

Supabase客户机使用postgrest,因此您可以在查询中使用各种运算符。

kmbjn2e3

kmbjn2e35#

这个特性是在最近发布的PostgREST 9支持中出现的。您必须使用!inner关键字,现在您可以过滤顶级表的行。

const query = supabase.from(`teachers`).select(
      `
        *,
        id_user!inner(image)
      `
    ).not("id_users.image", "is", "NULL")
68bkxrlz

68bkxrlz6#

这已经在PostgREST 9中实现了!
下面是一个例子:

const { data, error } = await supabase
  .from('messages')
  .select('*, users!inner(*)')
  .eq('users.username', 'Jane'

在您的情况下,您必须执行id_user!inner(image)
图片来源:www.example.comhttps://supabase.com/blog/postgrest-9#resource-embedding-with-inner-joins

相关问题