WHERE子句多表SQL查询:根据UserID获取GetID的实现
这需求很清晰,我给你整理两种实用的SQL查询方案,先把你的表结构和样本数据理清楚,方便理解逻辑:
表结构与样本数据
Table_1
| GetID | UnitID |
|---|---|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 4 |
| 2 | 5 |
| 3 | 5 |
| 3 | 6 |
| 4 | 6 |
Table_2
| ID | UnitID | UserID |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 2 | 1 |
| 1 | 3 | 1 |
| 1 | 4 | 1 |
| 1 | 5 | 2 |
| 1 | 6 | 3 |
你的核心需求是:给定一个UserID,找出所有至少有一个关联的UnitID属于该UserID的GetID。比如UserID=1时返回1、2,UserID=2时返回2、3。
方案1:子查询写法(逻辑直观)
先通过子查询拿到目标UserID对应的所有UnitID,再匹配Table_1里关联这些UnitID的GetID,最后用DISTINCT去重(因为一个GetID可能对应多个符合条件的UnitID):
SELECT DISTINCT t1.GetID FROM Table_1 t1 WHERE t1.UnitID IN ( SELECT t2.UnitID FROM Table_2 t2 WHERE t2.UserID = @TargetUserID -- 替换成你要查询的UserID,比如1或2 );
方案2:JOIN关联写法(性能友好)
直接通过UnitID把两个表关联起来,筛选目标UserID后去重,大数据量下如果有合适的索引,这个写法性能可能更好:
SELECT DISTINCT t1.GetID FROM Table_1 t1 JOIN Table_2 t2 ON t1.UnitID = t2.UnitID WHERE t2.UserID = @TargetUserID;
验证结果
- 当
@TargetUserID = 1时,Table_2里UserID=1的UnitID是1、2、3、4,Table_1中关联这些UnitID的GetID是1(对应1/2/3)和2(对应4),返回1,2,符合预期。 - 当
@TargetUserID = 2时,Table_2里UserID=2的UnitID是5,Table_1中关联UnitID=5的GetID是2和3,返回2,3,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Rlogical techsoft
相关产品推荐
相关产品推荐

