next.js 我如何查询两个表与另一个表的相同的外键?

wwodge7n  于 2023-11-18  发布在  其他
关注(0)|答案(1)|浏览(103)

我有这个user_id,它可以作为站和类型表的FK。
数据定义:

create table
  public.types (
    id uuid not null default uuid_generate_v4 (),
    name text not null,
    price numeric(10, 2) not null,
    user_id uuid not null,
    constraint types_pkey primary key (id),
    constraint types_user_id_fkey foreign key (user_id) references profiles (id) on update cascade on delete restrict
  ) tablespace pg_default;

        INSERT INTO types (id, name, price, user_id)
VALUES
  ('b6222d4b-5322-4b52-b80a-bb93759d2f6d', 'Type 1', 50, 'd5f71d08-abcd-45dd-9fb3-98bead9acfd3'),
  ('8fcda75e-d75d-4e18-a143-aeeec08a1fb1', 'Type 2', 25, 'cf336746-351b-4b1f-890e-7c7716472fe2'),
  (gen_random_uuid(), 'Type 1.2', 60, 'd5f71d08-abcd-45dd-9fb3-98bead9acfd3'),
  (gen_random_uuid(), 'Type 1.3', 70, 'd5f71d08-abcd-45dd-9fb3-98bead9acfd3'),
  (gen_random_uuid(), 'Type 1.4', 20, 'd5f71d08-abcd-45dd-9fb3-98bead9acfd3');

create table
  public.station (
    id uuid not null default gen_random_uuid (),
    user_id uuid not null default auth.uid (),
    station_name text not null,
    address text null,
    constraint station_pkey primary key (id),
    constraint station_user_id_key unique (user_id),
    constraint station_user_id_fkey foreign key (user_id) references profiles (id) on update cascade on delete cascade
  ) tablespace pg_default;


  INSERT INTO public.station (id, user_id, station_name, address)
VALUES
  ('6cf80bd7-633d-4bc3-8782-b69688e4c98d', '2521f577-9076-450d-b03d-1ab43b6354e6', 'Jennie', '12, Aaa, 7'),
  ('1f079d4b-492f-438a-a842-292ce8e954a1', 'd5f71d08-abcd-45dd-9fb3-98bead9acfd3', 'My Station', '12, Street name, 7');

字符串
我想要实现的是获取具有相同user_id的所有水类型和站点。因此,如果我尝试检索属于user2typesstation。我需要user2的数据,其中包含:
user2

'type2',20
'type 18', 300
 'station2'
 'Brazil`


我想应该是这样的,但是我怎么能在Supply.com中这样做呢?

select
  station,
  type
from
  station
  join station.user_id = type.user_id
where
  station.user_id = '2d6c72a1-175c-4c08-823e-10e35c0d1d7f'

**UPDATE:**我无法查询的原因是typestable的引用都来自auth.users,而不是PUBLIC。因此,我现在已经将我的表更新为:

添加了profiles表:

create table
  public.profiles (
    id uuid not null,
    email text null,
    full_name text null,
    constraint profiles_pkey primary key (id),
    constraint profiles_email_key unique (email),
    constraint profiles_id_fkey foreign key (id) references auth.users (id) on delete cascade
  ) tablespace pg_default;


我也已经更新了typesstation的FK。然而,我的问题仍然存在。我不知道如何检索共享同一user_id的多个表的数据。
我试过这个:

const { data, error } = await supabase
      .from('profiles')
      .select(`
        id,
        station: user_id (station_name),
        types(
          *
        )
      `)
      .eq('user_id',searchParams.id);


并尝试了这一点,但得到了一个错误,说:无法找到一个关系之间的'站'和'类型'在模式缓存错误。

const {data, error} = await supabase  
        .from('station')
        .select(`
          station_name,
          user_id,
          profiles(
            id
          ),
          type (
            user_id
          )
        `)
        .eq('user_id', searchParams.id)


我已经确定searchParams.id不为null,并且确实检索到了正确的用户ID。

yebdmbv4

yebdmbv41#

const {data, error} = await supabase  
    .from('profiles')
    .select(`
      *,
      station (
        station_name, user_id
      ),
      type (
        *
      )
    `)
    .eq('id', searchParams.id)

字符串
我需要做的实际上是替换from配置文件,因为它有stationtypesuser_id引用

相关问题