如何在 Oracle SQL 中选择相关的一组项目

Posted

技术标签:

【中文标题】如何在 Oracle SQL 中选择相关的一组项目【英文标题】:How to select a related group of items in Oracle SQL 【发布时间】:2008-11-19 13:00:14 【问题描述】:

我有一些表格数据

Key    ID      Link       
1      MASTER  123
2      AA      123
3      AA      123
4      BB      123
5      MASTER  456
6      CC      456

我希望能够在同一选择中选择所有符合选择条件的链接项目,以及链接的主文件。例如,如果我的 ID 为 'AA',我希望返回 ID = 'AA' 的行,以及 ID = 'MASTER' 的行和 123 的链接:

1      MASTER  123
2      AA      123
3      AA      123

我使用的是 Oracle 10.2g,所以如果有任何特殊的 Oracle 语法可以使这更容易,那就没问题了。

【问题讨论】:

【参考方案1】:

这是一种方法。

SELECT DISTINCT key, id, link
  FROM the_table
  START WITH id = 'AA'
  CONNECT BY id = 'MASTER' and link = PRIOR link and 'AA' = PRIOR ID

【讨论】:

谢谢 - 这非常好用。我对'PRIOR'语法不是很了解,我发现的网络链接没有这种用法。【参考方案2】:

SELECT * FROM table_name WHERE ID=your_id UNION ALL SELECT * FROM table_name WHERE ID='MASTER' AND link = (SELECT link FROM table_name WHERE ID=your_id)

这应该回答我理解的问题;)

【讨论】:

看起来它会给我正确的答案,但我希望我的答案会更有效率。您必须在数据上对其进行测试才能确定。 是的,您的解决方案使用nice connect by Oracle 语法。解释计划看起来也不错。【参考方案3】:

我的理解是,所有与 id = AA 具有相同“链接”的记录 首先你需要链接字段:

select i.link from table i
where i.id = YOUR_ID

现在您“选择”具有该链接的记录

select * from table 
where link in (select i.link from table i where i.id = YOUR_ID)

这个选择应该给你你需要的记录...

【讨论】:

【参考方案4】:

如果我理解正确,这是一个我认为符合您要求的示例:

select * from my_table where link in
(select link
from my_table
where id = 'AA')
and id in ('AA','MASTER')

【讨论】:

以上是关于如何在 Oracle SQL 中选择相关的一组项目的主要内容,如果未能解决你的问题,请参考以下文章

如何将Oracle中的数据导入到SQL Server中来

Oracle PL/SQL:首先选择一组 id,然后循环/处理它们的方法

如何更新除该组中最新项目之外的一组行

如何在一组行之后或有条件地在没有 PL/SQL 块的情况下增加 oracle 序列?

Oracle数据库速查知识文档

如何将项目导入eclipse中,有个SQL文件又如何导入数据库??