2017-07-22 3 views
0

Nicht wirklich sicher, wie man die Frage formuliert, jedoch zum ersten Mal die folgenden zu tun, aber mit ihm zu kämpfen. Leider nicht sicher über die genaue DB-Engine, die darunter läuft, mit der hohen Wahrscheinlichkeit, dass sie von IBM stammt.erweitert wählen Sie in SQL

Doing ein vereinfachte Daten Beispiel:

TRANSACTIONS 
Trans_ID Product_code 
    1  A1 
    1  B2 
    1  A9 
    2  B3 
    2  B4 
    3  A1 
    3  A9 
    3  A8 
    4  C2 
    5  D3 
    5  A1 

Also, ich bin in der Lage eine spezifische Produktcode (dh A1) zu verwenden, um die Transaktions-ID zu identifizieren, aber ich würde alle Zeilen im Ergebnis erhalten muß enthält die Transaktions-ID, in der der übereinstimmende Produktcode gefunden wird.

Was bedeutet, dass ich Produktcode A1 als Schlüssel verwenden können, jedoch würde ich alle drei Reihen mit TransID 1 erhalten müssen, dann 3 Reihen mit TransID 3 usw.

So sollten die Ergebnisse dieser Anzeige:

Trans_ID Product_code 
    1  A1 
    1  B2 
    1  A9 
    3  A1 
    3  A9 
    3  A8 
    5  D3 
    5  A1 
+1

'wählen * aus X wo trans_id in (wählen Sie trans_id von X wo product_code = 'A1')'? – melpomene

+0

Danke, es hat gut funktioniert – dotsent12

Antwort

2

Es gibt mehrere Möglichkeiten, wie Sie solche Abfragen angehen. Die erste in den Kommentaren erwähnt:

select * 
from X 
where trans_id in (select trans_id from X where product_code = 'A1') 

Die zweite Verwendung besteht Betreiber:

select * 
from X x1 
where exists (select * 
       from X x2 
       where product_code = 'A1' and x1.trans_id = x2.trans_id 
      ) 

nächstes ein ein mit Selbstverknüpfung:

select x1.trans_id, x1.product_code 
from X x1 join 
    X x2 
    on x1.trans_id = x2.trans_id 
where x2.product_code = 'A1' 

Ich glaube, dass ich fehle einige andere einfache Lösungen (zum Beispiel mit ANY), sind jedoch die einfachsten.