Sql 需要使用内部联接将值填充到行中
我在一个表中存储了联系人,在一个表中存储了他们的关系,在另一个表中存储了子详细信息。我需要使用每个家长的childid填充他们的“孩子名”Sql 需要使用内部联接将值填充到行中,sql,oracle,Sql,Oracle,我在一个表中存储了联系人,在一个表中存储了他们的关系,在另一个表中存储了子详细信息。我需要使用每个家长的childid填充他们的“孩子名” CREATE TABLE contact_table( contactid NUMBER(3) ,contactname VARCHAR2(30) ,contactage NUMBER(2) ); CREATE TABLE contact_maritalstatus( statusid NUMBER(3) ,contactid NUMBER(3) ,
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;
您尚未提供外键,因此我们必须推断您的数据模型。然而,父母和孩子似乎都在
联系表中
,而联系关系
将配偶与配偶、父母与孩子联系在一起。如果是这样,您只需再次连接到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
您尚未提供外键,因此我们必须推断您的数据模型。然而,父母和孩子似乎都在
联系表中
,而联系关系
将配偶与配偶、父母与孩子联系在一起。如果是这样,您只需再次连接到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
你认为你需要
contact\u maritalstatus
table..吗?不需要。我用它来显示每个人的婚姻状况。从建模的角度来看,性别是联系人的属性,而不是婚姻状况:孩子有性别,但(通常)没有婚姻状况。所以contactgender
属于contact\u表
。此外,使用一个表contact\u relation
存储两种类型的关系也是混乱的。如果一对夫妇有一个以上的孩子,婚姻关系将被记录多次。除非您打算在partnerid
和childid
之间强制执行弧。一个更清晰的解决方案可能是将是
的伴侣和是
的父母作为两个单独的表格进行建模。你认为你需要联系方式
表格吗?不。我用它来显示每个人的婚姻状况。从建模的角度来看,性别是联系的一个属性,而不是婚姻状况:孩子有性别,但是不是(通常)婚姻状况。所以contactgender
属于contact\u表
。此外,使用一个表contact\u relation
存储两种类型的关系也是混乱的。如果一对夫妇有一个以上的孩子,婚姻关系将被记录多次。除非您打算在partnerid
和childid
之间强制执行弧。一个更清晰的解决方案是将的is\u partner\u和的is\u parent\u建模为两个单独的表。