2012-03-26 80 views
0

我有兩個表; A和B.表A包含一列GUID。表B包含一列GUID和一列ClientID。在表B中,ClientID可以匹配到多個GUID。如果給定1個GUID,我將如何從表A中選擇屬於與給定GUID相同的ClientID的所有GUID?如何從表A中選擇它與表B中屬於特定客戶端的所有GUID

例如,如果表A有三行:

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

表B有3行:

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

我給出一個GUID(11111111-2222-3333-4444-555555555555),我怎麼會寫一個select語句找到與表B中的ClientID匹配的所有GUID? (11111111-2222-3333-4444-555555555555 & 33333333-4444-5555-6666-777777777777

+0

TableA有什麼貢獻?表B有一行(ClientA,someGuidNotInTableA)嗎? – Mikeb 2012-03-26 14:10:14

+0

正確。屬於ClientA的表B中可能有幾個GUID不在TableA中。 – Mark 2012-03-26 14:16:13

+0

如果您*給定*特定的GUID,表A如何發揮作用?在繼續搜索表B的過程中,您需要驗證給定的GUID是否屬於表A? – 2012-03-26 14:26:49

回答

1

嗯,怎麼樣先找到與客戶端中的給定表B

SELECT client FROM table_b WHERE guid = <given_guid> 

的GUID,然後讓所有的GUID從表中客戶端B

SELECT guid FROM table_b WHERE client = <client> 

我意思是你可以一次去做子查詢

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

但爲什麼使事情變得複雜

如果您需要來自表a的guid的客戶端的其他數據,您可以使用JOIN或使用上述作爲另一個子查詢,例如,

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

p.s.我討厭使用子查詢,幾乎總是有更好的方法

+0

謝謝!我總是過時和過度複雜的事情。當我不需要時,我試圖在1個SELECT語句中做所有事情。 – Mark 2012-03-26 14:26:07

0
SELECT a_guid 
    FROM TableA 
INTERSECT 
SELECT a_guid 
    FROM TableB 
WHERE ClientID IN (SELECT ClientID 
         FROM TableB 
         WHERE a_guid = @given_guid); 
相關問題