Gibt es eine Alternative zum Operator MULTISET, die Unterabfragen vermeidet?

8

Angenommen, Sie haben eine Tabelle wie folgt:

%Vor%

Und angenommen, es ist wie folgt ausgefüllt:

%Vor%

Angenommen, ich erstelle einen benutzerdefinierten Typ namens SALE_TYPE , der ein (PRODUCT_ID, SALE_AMOUNT) Tupel darstellt:

%Vor%

Angenommen, ich erstelle auch einen benutzerdefinierten Typ namens SALES_TYPE , der eine TABLE von SALE_TYPE darstellt:

%Vor%

Ich möchte die Tabellengruppe EMPLOYEE_SALES nach EMPLOYEE_ID abfragen. Für jedes EMPLOYEE_ID möchte ich ein SALES_TYPE erstellen, das den Umsatz dieses Angestellten enthält. Laut der Dokumentation würde ich so etwas tun:

%Vor%

Ich erwarte, dass diese Abfrage so etwas ergibt:

%Vor%

Gibt es eine Möglichkeit, dieselben Ergebnisse zu erzielen, ohne eine Unterabfrage zu stellen (die echte Abfrage, an der ich gerade arbeite, ist viel komplizierter als dieses erfundene Beispiel)? Zum Beispiel gibt es so etwas wie:

%Vor%     
Adam Paynter 08.03.2011, 18:23
quelle

2 Antworten

6
___ tag123sql ___ Structured Query Language (SQL) ist eine Sprache für die Abfrage von Datenbanken. Fragen sollten Codebeispiele, Tabellenstruktur, Beispieldaten und ein Tag für die verwendete DBMS-Implementierung (z. B. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 usw.) enthalten. Wenn sich Ihre Frage nur auf ein bestimmtes DBMS bezieht (verwendet bestimmte Erweiterungen / Funktionen), verwenden Sie stattdessen das Tag des DBMS. Antworten auf mit SQL gekennzeichnete Fragen sollten den ISO / IEC-Standard SQL verwenden. ___ tag123oracle ___ Oracle Database ist ein Datenbankmanagementsystem mit mehreren Modellen, das von Oracle Corporation erstellt wurde. Verwenden Sie dieses Tag NICHT für andere Produkte von Oracle wie Java und MySQL. ___ qstnhdr ___ Gibt es eine Alternative zum Operator MULTISET, die Unterabfragen vermeidet? ___ qstntxt ___

Angenommen, Sie haben eine Tabelle wie folgt:

%Vor%

Und angenommen, es ist wie folgt ausgefüllt:

%Vor%

Angenommen, ich erstelle einen benutzerdefinierten Typ namens %code% , der ein %code% Tupel darstellt:

%Vor%

Angenommen, ich erstelle auch einen benutzerdefinierten Typ namens %code% , der eine %code% von %code% darstellt:

%Vor%

Ich möchte die Tabellengruppe %code% nach %code% abfragen. Für jedes %code% möchte ich ein %code% erstellen, das den Umsatz dieses Angestellten enthält. Laut der Dokumentation würde ich so etwas tun:

%Vor%

Ich erwarte, dass diese Abfrage so etwas ergibt:

%Vor%

Gibt es eine Möglichkeit, dieselben Ergebnisse zu erzielen, ohne eine Unterabfrage zu stellen (die echte Abfrage, an der ich gerade arbeite, ist viel komplizierter als dieses erfundene Beispiel)? Zum Beispiel gibt es so etwas wie:

%Vor%     
___ tag123collections ___ Auflistungs-APIs stellen Entwicklern eine Reihe von Klassen und Schnittstellen zur Verfügung, mit denen die Sammlung von Objekten vereinfacht wird. ___ answer5239885 ___

In Oracle 10g können Sie den Operator COLLECT wie folgt verwenden:

%Vor%     
___ answer5236678 ___

Sie sollten in der Lage sein, eine benutzerdefinierte Aggregatfunktion zu schreiben Aggregatfunktionen, die erstellt wurden, um Strings vor 11.2 und die Funktion LISTAGG zu verketten.

Ich kann zum Beispiel ein EMP_OBJ-Objekt und eine Sammlung dieser Objekte (EMP_TBL) erstellen und eine benutzerdefinierte Aggregatfunktion schreiben, die aus einer einfachen SQL-Anweisung eine EMP_TBL-Sammlung generiert

Erstellen Sie die Basistypen

%Vor%

Erstellen Sie den Typ, den wir für die Aggregation verwenden möchten

%Vor%

Deklarieren Sie die Aggregatfunktion

%Vor%

Und jetzt wird eine einfache GROUP BY mit unserer benutzerdefinierten Aggregatfunktion eine EMP_TBL-Sammlung erzeugen

%Vor%     
___
Gary Myers 08.03.2011, 23:49
quelle
3

Sie sollten in der Lage sein, eine benutzerdefinierte Aggregatfunktion zu schreiben Aggregatfunktionen, die erstellt wurden, um Strings vor 11.2 und die Funktion LISTAGG zu verketten.

Ich kann zum Beispiel ein EMP_OBJ-Objekt und eine Sammlung dieser Objekte (EMP_TBL) erstellen und eine benutzerdefinierte Aggregatfunktion schreiben, die aus einer einfachen SQL-Anweisung eine EMP_TBL-Sammlung generiert

Erstellen Sie die Basistypen

%Vor%

Erstellen Sie den Typ, den wir für die Aggregation verwenden möchten

%Vor%

Deklarieren Sie die Aggregatfunktion

%Vor%

Und jetzt wird eine einfache GROUP BY mit unserer benutzerdefinierten Aggregatfunktion eine EMP_TBL-Sammlung erzeugen

%Vor%     
Justin Cave 08.03.2011 18:27
quelle

Tags und Links