如何在 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 PL/SQL:首先选择一组 id,然后循环/处理它们的方法