【问题标题】:fetch the unique data from the two table based on field in postgres根据 postgres 中的字段从两个表中获取唯一数据
【发布时间】:2021-04-03 17:41:59
【问题描述】:

我有一个名为 endeavorendeavor_plan 的两个表,具有以下架构。

endeavor
(
  id integer NOT NULL DEFAULT nextval('endeavor_id_seq'::regclass),
  code character varying(48) NOT NULL,
  display_name character varying(64) NOT NULL,
  active_plan_id integer,
  status character(1) NOT NULL DEFAULT 'A'::bpchar,
  methodology character(1) NOT NULL DEFAULT 'W'::character varying,
  CONSTRAINT endeavor_pkey PRIMARY KEY (id),
  CONSTRAINT fk6725eec2d3c3a85d FOREIGN KEY (active_plan_id)
      REFERENCES public.endeavor_plan (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)

endeavor_plan
(
  id integer NOT NULL DEFAULT nextval('endeavor_plan_id_seq'::regclass),
  creation_ts timestamp without time zone NOT NULL DEFAULT now(),
  status character(1) NOT NULL DEFAULT 'A'::bpchar,
  name character varying(128) NOT NULL,
  endeavor_id integer NOT NULL,
  CONSTRAINT endeavor_plan_pkey PRIMARY KEY (id),
  CONSTRAINT endeavor_plan_endeavor_id_fkey FOREIGN KEY (endeavor_id)
      REFERENCES public.endeavor (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)

努力数据:

endeavor_plan 数据:

我想要这样的输出:

endeavor_id endeavor_plan_id
1           1
2           6
3           8
4           10

查询:

如果我有 active_plan_id 在努力中,则将其返回到他们的努力 ID 否则我想要最古老的 creation_ts 努力计划 ID 反对他们没有“D”状态的努力 ID。 有什么建议吗???

【问题讨论】:

    标签: postgresql join


    【解决方案1】:

    你可以这样做:

    select e.id endeavor_id, coalesce(active_plan_id ,ep.id) endeavor_plan_id
    from endeavor e
    cross join lateral
    ( select id
      from endeavor_plan ep
      where ep.endeavor_id = e.id
      and ep.status <> 'D'
      order by creation_ts
      limit 1 
    ) ep 
    

    如果没有提供值,我假设 active_plan_id 为 null。

    db小提琴here

    【讨论】:

    • @ShashiMallah 看小提琴
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多