【问题标题】:Filtering in join in supabase在 supabase 中加入过滤
【发布时间】:2021-11-07 06:49:55
【问题描述】:

我将 supabase 与具有 2 个表的数据库一起使用(与此问题有关)。 表是teachersusers。两者分别有IDid_teacher/id_user。 我正在处理一个查询,我需要让所有老师加入users 表,其中有一个image 列。 我只需要得到teachersuser 有一个not null image

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

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

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

问题是当我尝试使用一些过滤器来避免 null images.

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

只是我试图避免user.image具有null值的老师的过滤器示例。 因为,我不想得到整个项目,但我得到一个带有id_user = null的项目@

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

如何正确解决这个问题?

【问题讨论】:

标签: javascript node.js postgresql filtering supabase


【解决方案1】:

Just createview 在数据库中用于解决此问题。 view 是查询的快捷方式,可以应用 where 子句。

在 supabase 上的 sql 编辑器中 https://app.supabase.io/project/{your_project_id}/editor/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;

阅读更多关于左连接here

在应用中使用

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

【讨论】:

    【解决方案2】:
    query.not("your_column_name", "is", "NULL")
    

    为我工作!

    很奇怪,如果你想检查 NULL

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

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

    【讨论】:

    【解决方案3】:

    这是不可能的。 You can see state of issue here. 一些可能性正在使用views o 在另一个表中启动查询。

    【讨论】:

      【解决方案4】:

      Supabase 客户端使用postgrest,因此您可以在查询中使用各种运算符。 See this page as a reference.

      【讨论】:

        【解决方案5】:

        此功能最近出现在support for PostgREST 9 的发布中。您必须使用!inner 关键字,您现在可以过滤顶级表的行。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-08
          • 2011-06-23
          • 1970-01-01
          • 2022-10-25
          • 1970-01-01
          • 1970-01-01
          • 2023-03-06
          • 1970-01-01
          相关资源
          最近更新 更多