我有两张桌子; 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
)
答案 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 );