Frage

Die Tabelle - Abfrage hat 2 Spalten (FunktionID, deepFunctionId)

Ich möchte alle Werte, die entweder in FunktionID oder in DeepfunctionID enthalten sind

Ich benutze das:

select distinct depfunctionid from Query
union 
select distinct functionid from Query

Wie geht es mir besser?

War es hilfreich?

Lösung

Ich denke, das ist das Beste, was du bekommen wirst.

Andere Tipps

Das ist so gut wie es geht, denke ich ...

Verlieren Sie die unterschiedlichen Klauseln, da Ihre Gewerkschaft (gegen Gewerkschaft alle) sich darum kümmern wird, Duplikate zu entfernen.

Eine Alternative - aber vielleicht weniger klar und wahrscheinlich mit demselben Ausführungsplan - wäre, einen vollständigen Zusammenhang über die beiden Spalten zu machen.

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

Ich bin mir fast sicher, dass Sie die Unterscheidungsmerkmale verlieren können. Wenn Sie Union anstelle von Union alle verwenden, werden doppelte Ergebnisse weggeworfen.

Es hängt alles davon ab, wie schwer Ihre Inline -Ansicht -Abfrage ist. Der Schlüssel für eine bessere Performance wäre, nur einmal auszuführen, aber das ist angesichts der Daten, die sie zurückgibt, nicht möglich.

Wenn Sie es so tun:

select depfunctionid , functionid from Query
group by depfunctionid , functionid

Es ist sehr wahrscheinlich, dass Sie wiederholte Ergebnisse für DeeptunctionID oder FunktionID erhalten.

Ich mag mich irren, aber es scheint mir, dass Sie versuchen, einen Baum von Abhängigkeiten abzurufen. Wenn dies der Fall ist, würde ich persönlich versuchen, einen materialisierten Pfadansatz zu verwenden.

Wenn der materialisierte Pfad in einem selbst -Referenzierungs -Tabellennamen gespeichert wird, würde ich den Baum mit so etwas abrufen

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

Dies würde den gesamten Baum in der richtigen Reihenfolge abrufen. Was saugt, ist, den materialisierten Pfad basierend auf der function_id und parent_function_id (oder in Ihrem Fall, FunktionID und DeephunctionID) zu konstruieren, aber ein Auslöser könnte sich leicht darum kümmern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top