【问题标题】:postgres getting data where two column references same parent idpostgres获取两列引用相同父ID的数据
【发布时间】:2011-08-09 06:49:57
【问题描述】:

postgres 数据库中有 3 个表

CREATE TABLE tab_name
(
  name_id integer NOT NULL,
  cust_name character varying NOT NULL, -- contains names like david,jones,athur
  CONSTRAINT tab_name_pkey PRIMARY KEY (name_id)
)

CREATE TABLE tab_rel
(
  rel_id integer NOT NULL,
  rel_desc character varying NOT NULL,-- contains relation description father son, sister brother
  CONSTRAINT tab_rel_pkey PRIMARY KEY (rel_id)
)

CREATE TABLE tab_rel_map
(
  rel_id integer NOT NULL,
  name_id1 integer NOT NULL,
  name_id2 integer NOT NULL,
  CONSTRAINT tab_rel_map_name_id1_fkey FOREIGN KEY (name_id1)
      REFERENCES tab_name (name_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT tab_rel_map_name_id2_fkey FOREIGN KEY (name_id2)
      REFERENCES tab_name (name_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT tab_rel_map_rel_id_fkey FOREIGN KEY (rel_id)
      REFERENCES tab_rel (rel_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)

我正在尝试编写以 rel_id 作为输入的函数,并且应该根据 name_id1 和 name_id2 输出 cust_name。因为 name_id1 和 name_id2 都引用了相同的父 ID,所以我无法获得各自的名称。

rel_id | relation     | cust_name1 | cust_name2
------------------------------------------------
1      | Father son   | David      | Jones

【问题讨论】:

    标签: postgresql foreign-keys reference primary-key


    【解决方案1】:

    您需要加入同一张表两次 - 以下是使用 aliases 的方法:

    select 
        rm.rel_id,
        r.rel_desc as relation,
        n1.cust_name as cust_name1,
        n2.cust_name as cust_name2
    from tab_rel_map rm
    join tab_rel r on r.id = rm.rel_id
    left join tab_name n1 on n1.name_id = rm.name_id1
    left join tab_name n2 on n2.name_id = rm.name_id2
    where rm.rel_id = 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-28
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多