如何编写SQL查询筛选含指定warehouse_id的关联表记录?
筛选关联表中包含指定warehouse_id的分组全记录
给定关联表结构与数据如下:
| warehouse_group_id | warehouse_id |
|---|---|
| 1 | 1 |
| 2 | 1 |
| 4 | 1 |
| 4 | 2 |
| 5 | 1 |
| 5 | 2 |
需求:筛选出所有包含指定warehouse_id的warehouse_group_id对应的全部记录。例如指定warehouse_id=2时,需返回warehouse_group_id为4和5的所有4条记录。
方法1:子查询匹配分组ID
SELECT * FROM your_table_name WHERE warehouse_group_id IN ( SELECT warehouse_group_id FROM your_table_name WHERE warehouse_id = 2 );
先通过子查询找出所有包含目标warehouse_id的分组ID,外层查询再提取这些分组对应的所有记录。
方法2:自连接实现关联筛选
SELECT t1.* FROM your_table_name t1 JOIN your_table_name t2 ON t1.warehouse_group_id = t2.warehouse_group_id WHERE t2.warehouse_id = 2;
将表与自身通过分组ID关联,筛选出包含目标warehouse_id的分组,同时取出该分组的所有记录。
方法3:EXISTS子句验证分组存在性
SELECT * FROM your_table_name t1 WHERE EXISTS ( SELECT 1 FROM your_table_name t2 WHERE t2.warehouse_group_id = t1.warehouse_group_id AND t2.warehouse_id = 2 );
检查当前记录所属分组是否存在目标warehouse_id的条目,存在则保留该记录。
注意:替换语句中的your_table_name为你的实际表名,2为需要指定的warehouse_id值即可。
内容的提问来源于stack exchange,提问作者Matexon
相关产品推荐
相关产品推荐

