You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:39:02