0

私はEclipseのデータベースにこのテーブルを持っています:

Recipe = (idR, recipeTitle, prepText, cuisineType, mealType)
Ingredient = (idI, ingrDesc)
RecipIngr = (idR*, idI*)

材料が最も少ないレシピのタイトルを表示しようとしています。これまでの私のクエリは次のとおりです。

  SELECT recipetitle, COUNT(*)
  FROM recipe
  GROUP BY recipetitle
  HAVING COUNT(recipetitle) =
  (SELECT MAX(COUNT(ingrdesc))
  FROM ingredient
  GROUP BY recipetitle);

これは「0行が影響を受けている」ことを示しているので、何が間違っているのかわかりません。何か助けはありますか?

4

2 に答える 2

1

必要に応じて、最初の一致またはすべての一致を選択します - MSSQL の場合。

初め:

SELECT TOP 1 RecipeTitle      = R.recipeTitle
       ,IngredientCount = COUNT(*)
FROM   Recipe R
INNER JOIN RecipIngr RI ON R.idR = RI.idR
INNER JOIN Ingredient I ON RI.idI = I.idI
    GROUP BY R.recipeTitle

全て:

SELECT dtbl.RecipeTitle
FROM (SELECT RecipeTitle      = R.recipeTitle
       ,IngredientCount = COUNT(*)
           ,rank = rank() OVER (Partition BY R.recipeTitle ORDER BY COUNT(*))
FROM   Recipe R
INNER JOIN RecipIngr RI ON R.idR = RI.idR
INNER JOIN Ingredient I ON RI.idI = I.idI
    GROUP BY R.recipeTitle) dtbl
WHERE dtbl.rank = 1
于 2013-04-14T17:06:47.163 に答える
1

JOINすべてのレシピの材料の数を数えるためにテーブルにいる必要があります。

SELECT
    r.recipeTitle,
    COUNT(*) AS nbOfIng
FROM
    recipe r
JOIN
    RecipIngr ri ON r.idR = ri.idR
GROUP BY
    r.idR, r.recipeTitle
HAVING
    nbOfIng = (
        SELECT
            MAX(COUNT(*))
        FROM
            recipe r2
        JOIN
            RecipIngr ri2 ON r2.idR = ri2.idR
        GROUP BY
            r2.idR
)

ただし、使用しているデータベース エンジンがわからないため、それが機能するかどうかは 100% わかりません。

于 2013-04-14T16:47:12.530 に答える