2012-03-26 4 views
0

entspricht Ich habe zwei Tabellen; A und B. Tabelle A enthält eine GUID-Spalte. Tabelle B enthält eine Spalte mit GUIDs und eine Spalte mit ClientIDs. In Tabelle B können die ClientIDs mehreren GUIDs zugeordnet werden. Wenn ich 1 GUID angeben würde, wie würde ich alle GUIDs aus Tabelle A auswählen, die zur selben ClientID wie die angegebene GUID gehören?Wie SELECT aus Tabelle A, wo es alle GUIDs eines bestimmten Clients aus Tabelle B

Zum Beispiel, wenn Tabelle A drei Reihen hat:

Row1 | 11111111-2222-3333-4444-555555555555 
Row2 | 22222222-3333-4444-5555-666666666666 
Row3 | 33333333-4444-5555-6666-777777777777 

Tabelle B hat drei Zeilen:

Row1 | ClientA | 11111111-2222-3333-4444-555555555555 
Row2 | ClientB | 22222222-3333-4444-5555-666666666666 
Row3 | ClientA | 33333333-4444-5555-6666-777777777777 

mir gegeben wird eine GUID (11111111-2222-3333-4444-555555555555), wie würde ich eine select-Anweisung schreiben um alle GUIDs von A zu finden, die mit der ClientID aus Tabelle B übereinstimmen? (11111111-2222-3333-4444-555555555555 & 33333333-4444-5555-6666-777777777777)

+0

Was leistet TableA? Gibt es Fälle, in denen Tabelle B eine Zeile hat (ClientA, someGuidNotInTableA)? – Mikeb

+0

Korrigieren. In Tabelle B können mehrere GUIDs vorhanden sein, die zu ClientA gehören und nicht in TableA enthalten sind. – Mark

+0

Wenn Sie * eine spezifische GUID * erhalten haben, wie kommt dann Tabelle A ins Spiel? Sie müssen überprüfen, ob die angegebene GUID zu Tabelle A gehört, bevor Sie mit der Suche in Tabelle B fortfahren? –

Antwort

1

Eh, wie wäre es zuerst den Client mit der aus Tabelle b

SELECT client FROM table_b WHERE guid = <given_guid> 

guid gegeben zu finden und dann alle GUIDs immer für diesen Client aus Tabelle b

SELECT guid FROM table_b WHERE client = <client> 

I bedeutet, dass Sie es auf einmal mit Unterabfragen tun könnten

SELECT guid FROM table_b WHERE client IN ( 
    SELECT client FROM table_b WHERE guid = <given_guid> 
) 

aber warum komplizieren Dinge

Wenn Sie die GUID für die Kunden zusätzliche Daten aus der Tabelle ein benötigen, können Sie entweder JOIN oder die oben als eine andere Unterabfrage verwenden, z.B.

p.s. Ich hasse die Verwendung von Unterabfragen, es gibt fast immer einen besseren Weg.

+0

Danke! Ich übersehe immer und übermäßig kompliziert Dinge. Ich habe versucht, alles in 1 SELECT-Anweisung zu tun, wenn es nicht benötigt wurde. – Mark

0
SELECT a_guid 
    FROM TableA 
INTERSECT 
SELECT a_guid 
    FROM TableB 
WHERE ClientID IN (SELECT ClientID 
         FROM TableB 
         WHERE a_guid = @given_guid); 
Verwandte Themen