SQL:使用预定查询的结果替换表的某些值

时间:2016-01-25 14:50:46

标签: sql sql-server sql-server-2012

以下任务是否可以完全在SQL脚本中完成?

我的数据库保存食谱。我想要做的是作为成分线的子部分。哪个没问题。我可以撤回这样的事情:

RECIPE LINE INGREDIENT DESC

Cake1  1    Sugar      Sugar
Cake1  2    CakeMix    PreMix for a Cake
Cake1  3    Water      Water

然而,在这个例子中,第2行实际上是名为CakeMix的配方,并且被用作Cake1中的一个成分。 CakeMix出现在与其自己的配方相同的表中的其他位置,如下所示:

RECIPE   LINE INGREDIENT DESC
CakeMix   1   Mix1       Line one of Mix
CakeMix   2   Mix2       Line two of Mix

所以我想要的是某种 IF语句,它会在顶层表的搜索结果中搜索关键词,然后说#14; PreMix"然后将该配方ID放入另一个select语句中以拉出第二个表并将其组合成以下内容:

RECIPE   LINE INGREDIENT DESC

Cake1     1    Sugar      Sugar
CakeMix   1   Mix1       Line one of Mix
CakeMix   2   Mix2       Line two of Mix
Cake1     3    Water      Water

有没有办法在SQL中完全执行此操作?

1 个答案:

答案 0 :(得分:0)

您可以通过多种方式完成此操作。首先想到的两个是CTE和在TSql中使用变量。

CTE方法

WITH cteFirstLine(RecipeID)
AS
(
    SELECT RecipeID FROM TblMixes WHERE DESC LIKE 'Premix%'
) 
SELECT * FROM TblRecipes r
    JOIN cteFirstLine f ON f.RecipeID=r.RecipeID

TSQL中的变量

DECLARE @recipeID INT

SELECT @recipeID=RecipeID FROM TblMixes WHERE DESC LIKE 'Premix%' AND Recipe = 'Cake1'

SELECT * FROM TblRecipes WHERE RecipeID=@recipeID