2012-03-26 83 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); 
相关问题