如何连接具有选择性重复记录的表? (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 003

SQL2 => RESULT2 => ID 名称 ----- ------ 003 名字1

SQL3 => RESULT3 => ID 名称 ----- ------ 003 名称2

模式(2) SQL1 => RESULT1 => ID 名称 ----- ------ 001 002 003 名称1

SQL2 => RESULT2 => ID 名称 ----- ------ 003

SQL3 => RESULT3 => ID 名称 ----- ------ 003 名称2

模式(3) SQL1 => RESULT1 => ID 名称 ----- ------ 001 002 003

SQL2 => RESULT2 => ID 名称 ----- ------ 003 名称1 003 名字2

SQL3 => RESULT3 => ID 名称 ----- ------

我怎样才能加入这 3 个结果成为以下结果? 身份证名称 ----- ------ 001 002 003 名称1 003 名称2

【问题讨论】:

【参考方案1】:

一种选择是将UNION 合并到SQL2SQL3 表中,然后将此结果连接回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)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 从具有重复引用条目的联合表中选择唯一记录

如何在没有重复数据的情况下对两个具有连接的表进行求和?

如何使用条件连接选择重复项的表

如何在postgresql的列中针对单个记录选择多个值[重复]

我如何在没有重复数据的情况下对两个具有连接的表求和?

如何在 Rails 中选择通过连接到另一个具有多条记录的表的最新记录