需要使用INNER JOIN将值填充到一行中

时间:2019-01-21 05:42:08

标签: sql oracle

我已将联系人存储在一个表中,并将其关系存储在一个表中,并将子项详细信息存储在另一个表中。我需要使用其子代填充每个父代的“子代名称”吗?

 CREATE TABLE contact_table(
 contactid NUMBER(3)
,contactname VARCHAR2(30)
,contactage NUMBER(2)
);


CREATE TABLE contact_maritalstatus(
statusid NUMBER(3)
,contactid NUMBER(3)
,contactgender VARCHAR2(8)
,contactstatus VARCHAR2(10)
);
CREATE TABLE contact_relation(
relationid NUMBER(3)
,contactid NUMBER(3)
,partnerid NUMBER(3)
,childid NUMBER(3)
);
CREATE TABLE contact_child(
childid NUMBER(3)
,contactid NUMBER(3)
);

SELECT cb.contactname,cm.contactgender,cm.contactstatus,cr.childid
FROM contact_table cb 
 inner join contact_maritalstatus cm  on cb.contactid = cm.contactid
 inner join contact_relation cr on cb.contactid = cr.contactid;

enter image description here

1 个答案:

答案 0 :(得分:3)

您尚未提供外键,因此我们必须推断您的数据模型。但是,似乎父母和孩子都在contact_table中,并且contact_relation彼此之间是配偶,父母是孩子。如果是这样,您只需要第二次加入contact_table,使用表和列别名来区分两个实例:

SELECT cp.contactname as parent_name 
       , cm.contactgender
       , cm.contactstatus
       , cr.childid
       , cc.contactname as child_name 
FROM contact_table cp
 inner join contact_maritalstatus cm  on cp.contactid = cm.contactid
 inner join contact_relation cr on cb.contactid = cr.contactid
 inner join contact_table cc on cc.contactid = cr.childid