SQL笔试中如何仅修改一处ID同时适配两个查询的查询条件?
解法核心逻辑
你没有误用子查询,也没有遗漏复杂知识点,本题的考点是通过统一参数存储目标食谱ID,实现一处修改、两处查询同时生效,不需要用UNION拼接结果(二者返回列结构不同,本来就不适合用UNION)。
以下是两种常见实现方案:
方案1:会话变量(入门笔试最常考的标准答案)
先将目标ID赋值给自定义变量,后续两个查询直接引用该变量即可,仅需要修改变量赋值行的数值就能切换查询的食谱,适配所有主流数据库。
MySQL 示例代码
-- 仅需修改本行的数值即可切换查询的食谱ID SET @target_recipe_id = 101; -- 第一组查询:返回指定食谱的食材、用量、备注 SELECT i.食材名称, ri.食材用量, r.备注 FROM Recipes r INNER JOIN RecipeIngredients ri ON r.ID = ri.食谱ID INNER JOIN Ingredients i ON ri.食材ID = i.食材ID WHERE r.ID = @target_recipe_id; -- 第二组查询:返回指定食谱的制作步骤 SELECT 制作步骤 FROM Recipes WHERE ID = @target_recipe_id;
其他数据库变量写法差异
- PostgreSQL:用
\set target_recipe_id 101声明变量,查询时引用格式为:target_recipe_id - SQL Server:用
DECLARE @target_recipe_id INT = 101声明变量,引用方式和MySQL一致
方案2:CTE绑定目标ID(无变量权限场景适用)
如果数据库环境不支持自定义变量,可以用公用表表达式(CTE)仅定义一次目标ID,两个查询都关联该CTE做过滤:
-- 仅需修改CTE内的数值即可切换查询的食谱ID WITH target_recipe AS (SELECT 101 AS id) -- 第一组查询 SELECT i.食材名称, ri.食材用量, r.备注 FROM Recipes r INNER JOIN RecipeIngredients ri ON r.ID = ri.食谱ID INNER JOIN Ingredients i ON ri.食材ID = i.食材ID INNER JOIN target_recipe t ON r.ID = t.id; -- 第二组查询 SELECT 制作步骤 FROM Recipes r INNER JOIN target_recipe t ON r.ID = t.id;
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

