加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle SQL Union / Merge with Duplicates问题

发布时间:2020-12-12 13:15:01 所属栏目:百科 来源:网络整理
导读:希望有人可以帮助我. 所以假设我有一个名为“TEMP_TABLE”的临时表 EMP_ID number EMP_FNAME varchar2() EMP_LNAME varchar2() “TEMP_TABLE”中的记录 1,Some,Guy2,Girl3,Animal 通过一些SQL魔术,我不打算深入研究,这些值被计算并放入TEMP_TABLE,一个函数返
希望有人可以帮助我.

所以假设我有一个名为“TEMP_TABLE”的临时表

EMP_ID     number
 EMP_FNAME  varchar2()
 EMP_LNAME  varchar2()

“TEMP_TABLE”中的记录

1,Some,Guy
2,Girl
3,Animal

通过一些SQL魔术,我不打算深入研究,这些值被计算并放入TEMP_TABLE,一个函数返回的一个select * from TEMP_TABLE的multiset

假设该函数是FUNC_THAT_RETURNS_TABLE

好的,如果我说表中的Select *(“FUNC_THAT_RETURNS_TABLE”);

我回来了:

1,Guy
  2,Girl
  3,Animal

到现在为止还挺好.

所以现在我创建另一个名为“NEWLY_CREATED_TABLE”的表

说:

Create Table "NEWLY_CREATED_TABLE" AS
 (Select * FROM table("FUNC_THAT_RETURNS_TABLE"));

请注意,该表是通过查询函数创建的

所以这三个记录现在应该在NEWLY_CREATED_TABLE内

问题是
如果我说:

Select * FROM NEWLY_CREATED_TABLE
Union
SELECT * FROM table("FUNC_THAT_RETURNS_TABLE");

结果集是:

1,Guy
 1,Guy
 2,Girl
 2,Girl
 3,Animal
 3,Animal

即使数据完全相同,有人可以告诉我我错过了什么吗?

在测试使用合并的可能性时,我发现了联合问题.
当我尝试将表中的数据与函数中的数据合并时,表中的所有数据都将被替换.这让我认为代码没有正确识别唯一记录.

我的合并代码:

Merge Into Newly_Created_Table a
 using
 (
   Select * from table(Func_That_Returns_TABLE)
 ) b
On (a.EMP_ID = b.EMP_ID)

When Matched....

When Not Matched....

**编辑**
9-7-2016 SHOUTOUT TO @Shannon Severance其中一个列中有一个空白区域.

是否有任何方法除了在插入之前尝试修剪,截断或使用触发器修剪:NEW值,以确保不会添加尾随空格无明显原因?

解决方法

我找到了解决方案.我跑了,并没有得到任何错误.

CREATE TABLE temp_table
(
 EMP_ID     NUMBER,EMP_FNAME  varchar2(32),EMP_LNAME  varchar2(32)
);

INSERT INTO temp_table values (1,'SOME','Guy');
INSERT INTO temp_table values (2,'Girl');
INSERT INTO temp_table values (3,'Animal');

CREATE OR REPLACE TYPE three_values_ot AS OBJECT
   (
 EMP_ID     NUMBER,EMP_LNAME  varchar2(32)
   );


CREATE OR REPLACE TYPE three_values_nt
   IS TABLE OF three_values_ot;

CREATE OR REPLACE FUNCTION FUNC_THAT_RETURNS_TABLE
   RETURN three_values_nt
IS
   l_return three_values_nt := 
      three_values_nt (three_values_ot (1,'Guy'),three_values_ot (2,'Girl'),three_values_ot (3,'Animal'));
BEGIN
   RETURN l_return;
END;

SELECT * FROM temp_table
UNION
SELECT * FROM TABLE (FUNC_THAT_RETURNS_TABLE ());

上述联合查询的输出是

1   SOME    Guy
2   SOME    Girl
3   SOME    Animal

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读