Я предпочитаю присоединяться только тогда, когда меня интересует объединенный результат. Это не тот случай, здесь. Вы только хотите видеть компоненты, соответствующие некоторому условию. Это FROM ingredients WHERE ...
. Условия принадлежат предложению WHERE
. Таким образом, вы получаете запрос, который легко понять и, следовательно, хорошо обслуживать.
DISTINCT
с другой стороны, очень часто является признаком плохо написанного запроса (просто объединение всего, а затем поиск некоторых средств, чтобы избавиться от что мы излишне произвели сами). Это также может быть довольно дорогостоящим, потому что это создает больший промежуточный результат, который затем должен быть отсортирован, чтобы найти созданные дубликаты.
Я бы использовал NOT IN
и IN
, чтобы получить все ингредиенты, которые не в наборе ингредиентов, рецепт которых в «Жаркое из говядины», «Ири sh Рагу» и «Полло Пикосо».
select ingredientid, ingredientname
from ingredients
where ingredientid not in
(
select ingredientid
from recipe_ingredients
where recipeid in
(
select recipeid
from recipes
where recipetitle in ('Roast Beef', 'Irish Stew', 'Pollo Picoso')
)
)
order by ingredientid;