如何从oracle中的其他两个表中插入数据
我正在创建一个新表。表中的值/数据来自另一个表。例如:在table A
我有场Code
用2个数据,EXE
和IMP
。在table B
我有一个数据2016
和2017
场Year
。现在我需要制作table C
,其中字段Status
其中Status
字段中的数据为EXE-2016
,IMP-2016
,EXE-2017
和IMP-2017
。这种问题的查询过程如何?如何从oracle中的其他两个表中插入数据
table A
code | code_name | flag
EXE | Execute | Y
IMP | Implement| Y
table B
Year | phase | flag
2016 | P1 | Y
2016 | P2 | Y
2017 | P1 | Y
2017 | P2 | Y
2018 | P1 | N
table C
Status | Flag
EXE-2016 | Y
IMP-2016 | Y
EXE-2017 | Y
IMP-2017 | Y
EXE-2018 | N
IMP-2018 | N
你想要从两个表中交叉加入记录:
- 表A每年的记录来自表A
- 每年来自表B的MAX标记(即, 'Y'胜过'N')
然后使用CREATE TABLE c AS <query>
为了从查询结果创建表格C.
create table c as
select a.code || '-' || bb.year as status, bb.flag
from a
cross join
(
select year, max(flag) as flag
from b
group by year
) bb;
(也许巴尔巴罗斯Özhan是正确的,你真的想创建一个视图,而不是然后使用create view c as <query>
。)
create table C as
select A.code || '-' || B.year as status
from A, B
即使仅仅是一个交叉连接,也不应该使用冗余的连接语法25年前。使用适当的ANSI连接:'从交叉连接B'。 –
我想除了我的妻子之外,没有人应该对我说我应该做什么以及我应该做什么。 –
在你的情况下,最好以这样的方式来创建一个view
记录sql
供以后就像一个表的使用情况:
create view tableC as
select code||' - '||year status, flag
from (
select a.code, b.year, b.flag from tableA a cross join tableB b
)
group by code, year, flag
order by year, code;/
select * from tableC;/
不要在1 = 1上写'inner join ...,因为这不是内连接(两个表的标准必须匹配),而是交叉连接。所以写:'交叉连接tableB b'。 –
@ThorstenKettner好的,你的想法更好,谢谢。 –
在你的演示中你使用'insert into tableA values('EXE');',我需要的是他们从另一个表中自动生成。因为我在表格A中有很多数据。你能举出另一个例子吗?你做了什么看起来像我需要的东西 –
提示:'CREATE TABLE [TABLE_1]作为选择......' – zarruq
不清楚你想要什么。请包括所有表格的样本表数据,包括输出。 –
我有一个查表编辑一样,我需要做的表格C,在那里他们得到表A和B.我试图Concat的数据,但我没有得到任何结果 –