2009-04-20 8 views
1

Gruppierung habe ich eine Abfrage, wie funktioniert:Vermeiden von mehreren wählt Unter wenn

select table_one.x, sum(table_one.y) 
(select foo from table_two where table_one.x = table_two.x) as item_description 
from table_one 
inner join table_two 
on table_one.x = table_two.x 
-- where table_2 row has various attributes 
group by table_one.x 

Die Gruppierung bedeutet, ich brauche eine Unterauswahl zwei foo aus Tabelle zuzugreifen. Wenn ich jetzt eine zweite Spalte aus Tabelle 2 auswählen möchte, gibt es eine Möglichkeit, auf diese ohne eine zweite Unterauswahl zuzugreifen?

Datenbank ist DB2.

BEARBEITEN: Join ist viele zu eins, dh denken Sie an Table_one als Bestellungen und Table_b als Informationen für den Artikel enthalten.

Antwort

2

Hat table_two mehrere Zeilen für jedes table_one.x oder ist es ein one-2-one Join ... Wenn es eins-2-eins ist dann tut das nicht was du willst ... da dein Sub wählen sie wird unter den gleichen Bedingungen durchgeführt, wie Ihr

SELECT 
    table_one.x, table_two.foo, sum(table_one.y) 
FROM table_one 
    INNER JOIN table_two 
     ON table_one.x = table_two.x 
GROUP BY 
    table_one.x, table_two.foo 
0
SELECT * 
FROM (
     SELECT x, SUM(y) 
     FROM table_one 
     GROUP BY 
       x 
     ) AS t1 
INNER JOIN 
     table_two t2 
ON  t2.x = t1.x 
-- where table_2 row has various attributes 
+0

die Leistung möglicherweise nicht gut für diese verbinden, wie es t1 zuerst, bevor er t2 – kishore

+0

materialisiert ich weiß nicht, DB2 in der Tiefe, sondern Oracle und MS SQL Verwirklichen Sie nicht die gesamte Ansicht, vorausgesetzt, es gibt einen Index für table_one (x). – Quassnoi

Verwandte Themen