2013-03-07 38 views
0

我有两张桌子。 TableATableB。这两个表都有一些数据,如下所示。执行两个表oracle的UNION?

TableA 
--------- 
id Name 
--- ---- 
1 abc 
2 def 

TableB 
--------- 
id Name 
--- ---- 
1 xyz 
2 pqr 

查询:

select id, name 
from TableA 
union 
select id, name 
from TableB; 

要求是:我需要这将满足以下条件的查询。

  1. 如果TableA中有数据,是不是有TableB中那么TableA的数据必须返回
  2. 如果表B有数据,是不是有TableA中则表B的数据必须返回
  3. 如果记录中都发现表ID相同的表必须重新调用

如何编写查询?

+1

有什么不对您的查询? – 2013-03-07 15:22:47

+0

@ PM77-1在两个表中都有记录,它将包含'TableA'的数据,其中OP在这种情况下需要'TableB'的数据。 – 2013-03-07 15:23:54

+0

@ PM77-1,当它们都匹配时,表B必须是首选。 – 2013-03-07 15:27:01

回答

1
SELECT [id], [Name] 
FROM TableB 

UNION 

SELECT [id], [Name] 
FROM TableA 
WHERE [id] NOT IN (SELECT [id] FROM [TableB] 

UNION将自动排除重复项。您只需要从TableB开始选择。

编辑:对不起,我想我没有完全读你的问题。我根据下面的评论编辑了我的答案。

+0

除了'id'是相同的情况,但'Name'不是... – GalacticCowboy 2013-03-07 15:27:26

+0

糟糕,你是对的。我没有仔细看数据。我'编辑我的答案。 – 2013-03-07 15:30:35

2

您的查询不满足(3)。

假设id不是空的,你可以写:

SELECT id, name 
    FROM tableB 
UNION ALL 
SELECT id, name 
    FROM tableA a 
WHERE a.id NOT IN (SELECT b.id 
         FROM tableB); 
+0

你说得对,我的错。顺便说一句,你的答案中有'FORM'而不是'FROM'。 – 2013-03-07 15:32:25

+0

@JeffRosenberg谢谢:) – 2013-03-07 15:44:28