Wählen Sie In eine temporäre Tabelle in DB2

. Lassen Sie mich diese Frage vorwegnehmen, obwohl ich einen starken Hintergrund in T-SQL habe, aber immer noch ein Neuling bin, wenn es kommt zu DB2.

Die Stammabfrage sieht ungefähr so aus:

Select Col1, Col2, Col3 From ( Select A.Col1, B.Col2, B.Col3 From SchemaA.TableA as A Inner Join SchemaA.TableB as B On A.Id = B.ParentId Where A.Col2 = "TypeValue" Fetch First 5 Rows Only -- This is not allowed in a union or sub select Union Select A.Col1, B.Col2, B.Col3 From SchemaB.TableA as A Inner Join SchemaB.TableB as B On A.Id = B.ParentId Where A.Col2 = "TypeValue" Fetch First 5 Rows Only -- This is not allowed in a union or sub select ) as Hybrid 

Weil Fetch First X Rows ist in Unterauswahlen oder bei Gewerkschaften nicht zulässig, dies wird nicht funktionieren. Da wir die Ausgabe begrenzen, ist es sinnvoll, die Eingabe zu begrenzen.

Ich denke, ich kann eine gefälschte Vereinigung erreichen Indem ich meine Unterauswahlen stattdessen in temporäre Tabellen einspeise und stattdessen diese Ausgabe zurückgebe.

In T-SQL kann ich eine temporäre Tabelle im laufenden Betrieb mit einer Abfrage wie dieser erstellen. Wie würde ich das in DB2 tun?

Select * Into #Temp From TableA 

Wie würde ich das in DB2 tun? Oder muss ich die Tabelle erstellen, bevor ich Daten in sie einfüge?

Kommentare

  • Welche Version von Db2 verwenden Sie?
  • Können Sie bitte auch die Quelle angeben, die Ihre Aussage stützt: Dies ist in einer Union oder Unterauswahl nicht zulässig.

Antwort

Ohne eine Bestellung durch Ihre Anfrage ist das nicht wirklich sinnvoll (IMHO). Trotzdem können Sie eine Abfrage wie die folgende verwenden:

select * from ( select A.x from A order by x fetch first 2 rows only ) union all ( select B.x from B order by x fetch first 3 rows only ) ; 

Ich habe ein kleines Beispiel für Sie zusammengestellt, mit dem Sie unter Geige

Antwort

Ich denke, dies kann gelöst werden, indem für jeden der beiden ein CTE verwendet wird wählt aus.

Ich habe ein Beispiel für Sie erstellt, indem ich die Tabellen SYSIMB.TABLES und SYSIBM.VIEWS zusammengefügt habe. Von beiden rufe ich nur die ersten 5 Zeilen ab.

WITH tables ( name ) AS (SELECT tab.name FROM sysibm.SYSTABLES tab FETCH FIRST 5 rows only ) , views ( name ) AS (SELECT vie.name FROM sysibm.SYSVIEWS vie FETCH FIRST 5 rows only ) SELECT name FROM tables UNION SELECT name FROM views; 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.