暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 父子关系查询

ASKTOM 2019-06-21
640

问题描述

嗨,

我有两张表。

1.联系人
2.接触点

联系人表包含row_id,名字,姓氏,dob等Row_id是主键。

Contact_point表包含电话号码、类型和fk到联系人表。

我不希望子表中的每个记录重复父信息。只有第一个记录需要有父信息。

联系表数据样本

1约翰·史密斯30/2/2009
2阿德尔·卡迈勒12/3/2001

样品接触点表
p.k型电话联系人 _ 标识
123移动088654387 1
231工作66545298 1
342移动456625 2
657工作8897642 2

当我加入这两个表时,我需要看到如下结果:

1  john  smith  123  mobile  088654387 (row 1)
--------------------------------------
                231  work     66545298 (row 2)
--------------------------------------
2  adel   kamel 342  mobile   456625   (row 3)
--------------------------------------
                657  work     8897642  (row 4)
----------------------------------------------


-对问题的进一步更新

CREATE TABLE CONTACT_POINT
    (row_id varchar(50),
  type varchar(30), 
 phone_number varchar(100),
 contact_id varchar(50))
;
-- insert into contact
INSERT INTO CONTACT
    (row_id, first_name, last_name)
VALUES
    ('123', 'john', 'Fred');
 
INSERT INTO CONTACT
    (row_id, first_name, last_name)
VALUES
    ('456', 'Adel', 'Kamel');

-- insert into contact_point

INSERT INTO CONTACT_POINT
    (row_id,type,phone_number,contact_id)
VALUES
    ('1', 'Mobile', '078766455', '123');
 
INSERT INTO CONTACT_POINT
    (row_id,type,phone_number,contact_id)
VALUES
    ('2', 'Work', '045651539', '123');

INSERT INTO CONTACT_POINT
    (row_id,type,phone_number,contact_id)
VALUES
    ('3', 'Mobile', '66545290', '456');

INSERT INTO CONTACT_POINT
    (row_id,type,phone_number,contact_id)
VALUES
    ('4', 'Work', '03555344', '456');

专家解答

听起来你想解开枢轴:

create table CONTACT (
  row_id varchar2(50), first_name varchar2(50), last_name varchar2(50)
);

CREATE TABLE CONTACT_POINT (
row_id varchar2(50),
type varchar2(30),
phone_number varchar2(100),
contact_id varchar2(50)
)
;
-- insert into contact
INSERT INTO CONTACT
(row_id, first_name, last_name)
VALUES
('123', 'john', 'Fred');

INSERT INTO CONTACT
(row_id, first_name, last_name)
VALUES
('456', 'Adel', 'Kamel');

-- insert into contact_point

INSERT INTO CONTACT_POINT
(row_id,type,phone_number,contact_id)
VALUES
('1', 'Mobile', '078766455', '123');

INSERT INTO CONTACT_POINT
(row_id,type,phone_number,contact_id)
VALUES
('2', 'Work', '045651539', '123');

INSERT INTO CONTACT_POINT
(row_id,type,phone_number,contact_id)
VALUES
('3', 'Mobile', '66545290', '456');

INSERT INTO CONTACT_POINT
(row_id,type,phone_number,contact_id)
VALUES
('4', 'Work', '03555344', '456'); 

select contact_id, first_name, last_name, v1, v2
from   contact c
join   contact_point p
on     c.row_id = p.contact_id
unpivot (
  ( v1, v2 ) for ( c1, c2 ) in ( ( type, phone_number ) )
);

FIRST_NAME    LAST_NAME    CONTACT_ID    V1        V2          
john          Fred         123           Mobile    078766455    
john          Fred         123           Work      045651539    
Adel          Kamel        456           Mobile    66545290     
Adel          Kamel        456           Work      03555344    


你可以在https://blogs.oracle.com/sql/how-to-convert-rows-to-columns-and-back-again-with-sql-aka-pivot-and-unpivot#unpivot
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论