表 - 查询有2列(functionId,depFunctionId)

我想要所有在functionid或depfunctionid中的值

我正在使用它:

select distinct depfunctionid from Query
union 
select distinct functionid from Query

如何做得更好?

有帮助吗?

解决方案

我认为这是你能得到的最好的。

其他提示

这就像我想的那样好......

丢失DISTINCT子句,因为你的UNION(vs UNION ALL)将负责删除重复项。

另一种选择 - 但可能不那么清晰,可能具有相同的执行计划 - 将在两列中进行全加入。

SELECT 
    COALESCE(Query1.FunctionId, Query2.DepFunctionId) as FunctionId
FROM Query as Query1
FULL OUTER JOIN Query as Query2 ON
    Query1.FunctionId = Query2.DepFunctionId

我几乎可以肯定你可以放弃那些与众不同的东西。 当您使用UNION而不是UNION ALL时,会丢弃重复的结果。

这完全取决于您的内联视图查询的重量。更好性能的关键是只执行一次,但鉴于它返回的数据,这是不可能的。

如果你这样做:

select depfunctionid , functionid from Query
group by depfunctionid , functionid

您很可能会获得depfunctionid或functionid的重复结果。

我可能错了,但在我看来,你正试图检索一棵依赖树。如果是这样,我个人会尝试使用物化路径方法。

如果物化路径存储在自引用表名中,我会使用

之类的内容检索树。
select asrt2.function_id
from   a_self_referencig_table asrt1,
       a_self_referencig_table asrt2
where  asrt1.function_name = 'blah function'
and    asrt2.materialized_path like (asrt1.materialized_path || '%')
order  by asrt2.materialized_path, asrt2.some_child_node_ordering_column

这将以正确的顺序检索整个树。糟糕的是必须基于function_id和parent_function_id(或者在你的情况下,functionid和depfunctionid)构造物化路径,但触发器可以很容易地处理它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top