我有一个看起来像的存储过程:
AS
BEGIN
DECLARE @result nvarchar(max)
SELECT @result = COALESCE(@result + ', ', '') + ingredient.NAME
FROM MEAL
LEFT JOIN MEAL meal ON MEAL.ID= ingredient.MEAL_ID
JOIN INGREDIENT ingredient ON ingredient.INGREDIENT_ID = problem_type.GID
where MEAL.ID=@ID
RETURN @result
END
膳食可能含有成分(面粉,肉等)。让我们说,我不检查成分(问题很复杂,这是一个例子)和那顿饭可以含有面粉,面粉(2X)和肉类。 当我想在app中显示结果时,此存储过程将返回“面粉,面粉,肉”字符串。我不会那样,我想要“面粉,肉”。
如何在存储过程中执行此操作? 有没有办法在SELECT(?)中添加一些if语句。例如,在C#中,我可以拆分字符串,而不是检查是否有重复项,但存储过程中是否可以这样做?
答案 0 :(得分:1)
一种方法是使用子查询来获取不同的值,然后在外部查询中将它们连接起来:
BEGIN
DECLARE @result nvarchar(max);
SELECT @result = COALESCE(@result + ', ', '') + i.NAME
FROM (SELECT DISTINCT i.NAME
FROM INGREDIENT i
WHERE i.MEAL_ID = @ID
) i
RETURN @result
END
注意:我在查询中删除了JOIN
个。您有两次MEAL
表,我认为这是一个错误 - ON
条件注定要失败,problem_type
未定义。更重要的是,它们不是必需的,因为INGREDIENT
具有MEAL_ID
条款的WHERE
。
此外,如果没有额外的JOIN
,您可能会发现DISTINCT
不是必需的。