0

特定の値を持つ特定のレコードを除外するクエリを考え出そうとしています。これが私のコードのスニペットです:

CREATE TABLE #myMenu
    ([Id] int, [dish] varchar(100), [dishtype] varchar(10), [amount] int, [ingredient]     varchar(10))
;

INSERT INTO #myMenu
    ([Id], [dish], [dishtype], [amount], [ingredient])
VALUES
    (1, 'salad', 'appetizer', 1, 'nuts'),
    (1, 'salad', 'appetizer', 1, 'lettuce'),
    (2, 'chicken cashew nuts', 'main', 2, 'chicken'),
    (2, 'chicken cashew nuts', 'main', 9, 'nuts'),
    (3, 'chicken marsala', 'main', 0, 'chicken'),
    (3, 'chicken marsala', 'main', 0, 'pepper'),
    (4, 'roast pork macadamia', 'main', 2, 'nuts'),
    (4, 'roast pork macadamia', 'main', 2, 'pork')  
;

ここでやりたいことは、ナッツを含まないすべての料理を選択することです。次のもののみが必要です。

(3, 'chicken marsala', 'main'
4

3 に答える 3

2

コードは以下のとおりですが、提供したテーブルは正規化して複数のテーブルに分割する必要があります。

 select [Id],[dish],[dishtype]  
 from #myMenu  
 group by [Id],[dish],[dishtype]
 having sum(Case When ingredient='nuts' Then 1 Else 0 End)=0
于 2013-09-16T03:08:08.407 に答える
1
select M.Id, M.Dish, M.DishType
  from #myMenu as M inner join
    ( select Id, Sum( case when Ingredient = 'nuts' then 1 end ) as Nutty from #MyMenu group by Id ) as Nuts
    on Nuts.Id = M.Id and Nuts.Nutty is NULL
  group by M.Id, M.dish, M.dishtype

また:

select distinct M.Id, M.Dish, M.DishType
  from #myMenu as M inner join
    ( select Id, Sum( case when Ingredient = 'nuts' then 1 end ) as Nutty from #MyMenu group by Id ) as Nuts
    on Nuts.Id = M.Id and Nuts.Nutty is NULL
于 2013-09-16T02:02:41.213 に答える
0
Select *
FROM myMenu
WHERE ingredient != 'nuts' AND
dish NOT LIKE '%macadamia%' AND
dish NOT LIKE '%cashew%'

メインディッシュのみを含めたい場合は、AND ディッシュタイプ = 'メイン' を追加するだけです

于 2013-09-16T01:57:48.367 に答える