基于SQL的高级查询:多条件组合筛选tblStudent表
实现指定筛选逻辑的SQL语句
直接硬编码条件的写法
如果筛选条件固定,可直接用IN运算符替代同类型的OR逻辑,再用AND连接不同类型的条件,SQL语句如下:
SELECT Id, Name, Age, PlaceOfBirthId, CityId FROM tblStudent WHERE PlaceOfBirthId IN (3, 8) AND CityId IN (56, 71);
说明:
PlaceOfBirthId IN (3, 8)等价于PlaceOfBirthId = 3 OR PlaceOfBirthId = 8,满足同类型筛选条件的OR规则;- 不同筛选类型(出生地ID和城市ID)之间用
AND连接,确保同时满足两类条件; - 执行该语句后会返回预期的两条学生记录。
基于筛选表的动态写法(适用于筛选条件存储在数据表中的场景)
如果筛选条件存储在一张数据表(例如命名为tblFilters)中,可通过子查询关联实现动态筛选,无需硬编码值:
SELECT s.Id, s.Name, s.Age, s.PlaceOfBirthId, s.CityId FROM tblStudent s -- 关联出生地ID的筛选条件 JOIN (SELECT FilterValue FROM tblFilters WHERE FilterId = 1) f1 ON s.PlaceOfBirthId = f1.FilterValue -- 关联城市ID的筛选条件 JOIN (SELECT FilterValue FROM tblFilters WHERE FilterId = 2) f2 ON s.CityId = f2.FilterValue GROUP BY s.Id, s.Name, s.Age, s.PlaceOfBirthId, s.CityId;
说明:
- 通过子查询分别提取两类筛选条件的值;
- 使用
JOIN确保学生记录同时匹配两类筛选条件; GROUP BY用于避免同一学生因匹配多个同类型条件而出现重复记录。
内容的提问来源于stack exchange,提问作者misha co
相关产品推荐
相关产品推荐

