在连接表中查找只有一行的记录

dst*_*arh 5 sql sql-server

recipe_food_xref
recipe_id int
food_id int
Run Code Online (Sandbox Code Playgroud)

需要找到recipe_food_xref中的一条记录,其中食谱只有一种食物,食物是特定食物.

它完美地融入了自身:

SELECT x1.recipe_id FROM recipe_food_xref x1
INNER JOIN recipe_food_xref x2 ON x2.recipe_id = x1.recipe_id
WHERE x1.food_id = 1
GROUP BY x1.recipe_id
HAVING COUNT(x2.recipe_id) = 1
Run Code Online (Sandbox Code Playgroud)

这看起来有点难看,我想知道是否有更好的方法.

这是一个包含一些示例数据的SqlFiddle.基本上我想找到recipe_id:1,因为它有food_id:1并且没有多个food_id

http://sqlfiddle.com/#!3/6d474/1

jue*_*n d 2

SELECT recipe_id 
FROM recipe_food_xref
GROUP BY recipe_id
HAVING sum(case when food_id = 1 then 1 else 0 end) = 1
and sum(case when food_id <> 1 then 1 else 0 end) = 0
Run Code Online (Sandbox Code Playgroud)

SQLFiddle 演示