如何连接具有选择性重复记录的表? (oracle10g)
Posted
技术标签:
【中文标题】如何连接具有选择性重复记录的表? (oracle10g)【英文标题】:How to join table with selective duplicate records? (oracle10g) 【发布时间】:2016-06-29 05:13:03 【问题描述】:如何为以下要求创建 ORACLE 查询?
问题是如果某些SQL结果中存在相同的ID,我怎样才能获得Name不为空或NULL的那个ID的记录。
模式(1) SQL1 => RESULT1 => ID 名称 ----- ------ 001 002 003SQL2 => RESULT2 => ID 名称 ----- ------ 003 名字1
SQL3 => RESULT3 => ID 名称 ----- ------ 003 名称2
模式(2) SQL1 => RESULT1 => ID 名称 ----- ------ 001 002 003 名称1SQL2 => RESULT2 => ID 名称 ----- ------ 003
SQL3 => RESULT3 => ID 名称 ----- ------ 003 名称2
模式(3) SQL1 => RESULT1 => ID 名称 ----- ------ 001 002 003SQL2 => RESULT2 => ID 名称 ----- ------ 003 名称1 003 名字2
SQL3 => RESULT3 => ID 名称 ----- ------
我怎样才能加入这 3 个结果成为以下结果? 身份证名称 ----- ------ 001 002 003 名称1 003 名称2【问题讨论】:
【参考方案1】:一种选择是将UNION
合并到SQL2
和SQL3
表中,然后将此结果连接回SQL1
:
SELECT t1.ID, t1.NAME
FROM SQL1 t1 LEFT JOIN
(
SELECT ID, NAME
FROM SQL2
UNION ALL
SELECT ID, NAME
FROM SQL3
) t2
ON t1.ID = t2.ID
【讨论】:
谢谢兄弟。抱歉我的误导性问题。每个 sql 的结果可能会有所不同。我已经更新了这个问题。问题是如果某些SQL结果中存在相同的ID,我如何获取该ID的记录,其名称不是空白或NULL。 您的问题现在还不清楚。请再次更新,显示输入和预期输出的示例表格(不是图表)。【参考方案2】:这适用于您的场景
with tbl(id,name) as
(query1
union all
query2
union all
query 3
)
select * From tbl where name is null
and id not in
(select id from tbl where name is not null)
union all
select * from tbl where name is not null
我已经创建了示例示例
with tbl(id,name) as
(select 1,null from dual union all
select 2,null from dual union all
select 3,null from dual union all
select 3,'NAME1' from dual union all
select 3,'NAME2' from dual)
select * From tbl where name is null
and id not in
(select id from tbl where name is not null)
union all
select * from tbl where name is not null
输出
id name
---------
1
2
3 NAME1
3 NAME2
【讨论】:
谢谢你的回复兄弟!以上是关于如何连接具有选择性重复记录的表? (oracle10g)的主要内容,如果未能解决你的问题,请参考以下文章