将两个不同的表格合并成一个。

huangapple go评论56阅读模式
英文:

how to combine two different tables into one

问题

I have a table with below structure

INSERT INTO reservation(rid, WHEEL_CHAIR, blind) VALUES (1,8,9)
INSERT INTO reservation(rid, WHEEL_CHAIR, blind) VALUES (2,11,12)
    
SELECT id,
       WHEEL_CHAIR,
       blind
FROM   reservation
1 8 9
2 11 12

This gives a count of people who need wheel chair(8) and count of blind people (9) and I have a disability table where the details of the disability is explained

INSERT INTO disability(hid, code, DESCRIPTION) VALUES (5,'aa', 'wheel chair')
INSERT INTO disability(hid, code, DESCRIPTION) VALUES (7,'bl', 'blind')

I want to club the above 2 tables and need to have a new table with the data

insert into newTable( newID,hid,count) values (1,5,8) 
insert into newTable( newID,hid,count) values (1,7,9)
insert into newTable( newID,hid,count) values (2,5,11) 
insert into newTable( newID,hid,count) values (2,7,12)

here 5 and 7 are the disability ids and 8,9,11,12 are the count of the blind people or the count of people who need a wheel chair.

英文:

I have a table with below structure

INSERT INTO reservation(rid, WHEEL_CHAIR, blind) VALUES (1,8,9)
INSERT INTO reservation(rid, WHEEL_CHAIR, blind) VALUES (2,11,12)
    
SELECT id,
       WHEEL_CHAIR,
       blind
FROM   reservation
1 8 9
2 11 12

This gives a count of people who need wheel chair(8) and count of blind people (9) and I have a disability table where the details of the disability is explained

INSERT INTO disability(hid, code, DESCRIPTION) VALUES (5,'aa', 'wheel chair')
INSERT INTO disability(hid, code, DESCRIPTION) VALUES (7,'bl', 'blind')

I want to club the above 2 tables and need to have a new table with the data

insert into newTable( newID,hid,count) values (1,5,8) 
insert into newTable( newID,hid,count) values (1,7,9)
insert into newTable( newID,hid,count) values (2,5,11) 
insert into newTable( newID,hid,count) values (2,7,12)

here 5 and 7 are the disability ids and 8,9,11,12 are the count of the blind people or the count of people who need a wheel chair.

答案1

得分: 1

以下是翻译好的部分:

对我来说,这看起来像是一个带有case表达式的交叉连接。

示例数据:

SQL> with
  2  reservation (rid, wheel_chair, blind) as
  3    (select 1,  8,  9 from dual union all
  4     select 2, 11, 12 from dual
  5    ),
  6  disability (hid, code, description) as
  7    (select 5, 'aa', 'wheel chair' from dual union all
  8     select 7, 'bl', 'blind'       from dual
  9    )

查询从这里开始:

 10  select r.rid as newid,
 11         d.hid,
 12         case when d.hid = 5 then r.wheel_chair
 13              when d.hid = 7 then r.blind
 14         end as count
 15  from reservation r cross join disability d;

     NEWID        HID      COUNT
---------- ---------- ----------
         1          5          8
         1          7          9
         2          5         11
         2          7         12

SQL>;

如果您需要将这些行插入到新表中,这应该是一个相当简单的任务,所以我会留给您。

英文:

To me, it looks as a cross join with case expression.

Sample data:

SQL> with
  2  reservation (rid, wheel_chair, blind) as
  3    (select 1,  8,  9 from dual union all
  4     select 2, 11, 12 from dual
  5    ),
  6  disability (hid, code, description) as
  7    (select 5, 'aa', 'wheel chair' from dual union all
  8     select 7, 'bl', 'blind'       from dual
  9    )

Query begins here:

 10  select r.rid as newid,
 11         d.hid,
 12         case when d.hid = 5 then r.wheel_chair
 13              when d.hid = 7 then r.blind
 14         end as count
 15  from reservation r cross join disability d;

     NEWID        HID      COUNT
---------- ---------- ----------
         1          5          8
         1          7          9
         2          5         11
         2          7         12

SQL>

If you have to insert these rows into a new table, that should be fairly simple task to do so I'll leave it to you.

答案2

得分: 0

reservation表进行解压缩,然后与disabilities表进行INNER JOIN

SELECT rid AS newId, hid, cnt
FROM   reservation
       UNPIVOT (
         cnt FOR description IN (
           wheel_chair AS 'wheel chair',
           blind AS 'blind'
         )
       ) r
       INNER JOIN disability d
       ON (d.description = r.description)

对于示例数据:

CREATE TABLE reservation(rid, WHEEL_CHAIR, blind) AS
  SELECT 1,8,9 FROM DUAL UNION ALL
  SELECT 2,11,12 FROM DUAL;

CREATE TABLE disability(hid, code, DESCRIPTION) AS
  SELECT 5, 'aa', 'wheel chair' FROM DUAL UNION ALL
  SELECT 7, 'bl', 'blind' FROM DUAL

输出:

NEWID HID CNT
1 5 8
1 7 9
2 5 11
2 7 12

fiddle

英文:

Unpivot the reservation table and then INNER JOIN it to the disabilities table:

SELECT rid AS newId, hid, cnt
FROM   reservation
       UNPIVOT (
         cnt FOR description IN (
           wheel_chair AS 'wheel chair',
           blind AS 'blind'
         )
       ) r
       INNER JOIN disability d
       ON (d.description = r.description)

Which, for the sample data:

CREATE TABLE reservation(rid, WHEEL_CHAIR, blind) AS
  SELECT 1,8,9 FROM DUAL UNION ALL
  SELECT 2,11,12 FROM DUAL;

CREATE TABLE disability(hid, code, DESCRIPTION) AS
  SELECT 5, 'aa', 'wheel chair' FROM DUAL UNION ALL
  SELECT 7, 'bl', 'blind' FROM DUAL

Outputs:

NEWID HID CNT
1 5 8
1 7 9
2 5 11
2 7 12

fiddle

huangapple
  • 本文由 发表于 2023年5月11日 15:29:52
  • 转载请务必保留本文链接:https://go.coder-hub.com/76225098.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定