如何从表A中进行选择,它匹配属于表B中特定客户端的所有guid

时间:2012-03-26 14:02:26

标签: sql tsql

我有两张桌子; A和B.表A包含一列GUID。表B包含一列GUID和一列ClientID。在表B中,ClientID可以与多个GUID匹配。如果给定1 GUID,我如何从表A中选择属于与给定GUID相同的ClientID的所有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语句来查找A中与表B中的ClientID匹配的所有GUID? (11111111-2222-3333-4444-555555555555& 33333333-4444-5555-6666-777777777777

2 个答案:

答案 0 :(得分:1)

呃,如何用表b中的给定guid首先找到客户端

SELECT client FROM table_b WHERE guid = <given_guid>

然后从表b获取该客户的所有guid

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。我讨厌使用子查询,几乎总有一种更好的方法

答案 1 :(得分:0)

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