2014-11-21 2 views
1

я в настоящее время этот SQL-запрос:Как найти продукты в одной группе, но не другой

SELECT 
    product.name "Product", 
    section.floor "Floor" 
FROM 
    products 
JOIN 
    sales 
ON 
    products.productID = sales.productID 
JOIN 
    sections 
ON 
    sales.sectionID = sections.sectionID 
WHERE 
    sections.floor = 1 // BUT NOT ON FLOOR = 2 

Моя идея заключается в том, чтобы увидеть, какие продукты продаются на первом этаже, а не на втором этаже. Мне удается получить все продукты, проданные на первом, но как я могу избавиться от продуктов, которые также найдены на втором?

Моя мысль состоит в том, чтобы получить все продукты, продаваемые на обоих этажах, и удалить список проданных продуктов и удалить их из списка всех продуктов на первом этаже, но я не знаю, как это сделать.

+0

Если вы не уверены, что знаете, что делаете, если вы обнаружите, что используете предложение GROUP BY без агрегационных функций, есть вероятность, что вы делаете что-то неправильно! – Strawberry

+0

О, извините, удалил, не знаю, почему я набрал эту GROUP BY здесь, я знаю об агрегирующих функциях, очень жаль. – Eduard

ответ

3

Прежде всего, у вас нет необходимости в инструкции GROUP BY, поэтому вы можете избавиться от этого.

Если вы хотите избежать предметов второго этажа, сначала необходимо выбрать все продукты с первого этажа и добавить еще один подзапрос, который отфильтровывает продукты, которые также продаются на втором этаже.

Это выглядит следующим образом:

SELECT p.name, s.floor 
FROM products p 
JOIN sales sa ON sa.productid = p.productid 
JOIN sections s ON s.sectionid = sa.sectionid 
WHERE s.floor = 1 
    AND p.productid NOT IN(
     SELECT p.productid 
     FROM products p 
     JOIN sales sa ON sa.productid = p.productid 
     JOIN sections s ON s.sectionid = sa.sectionid 
     WHERE s.floor = 2) 

Другой способ думать о выше это: Дайте мне каждое название продукта и пол для всех продуктов, продаваемых на первом этаже, где что ProductID не является одним из productids который продается на втором этаже.

+1

Перечитывая свой вопрос, я не совсем уверен, хотите ли вы продуктов на 1 или 2 этаже, но концепция остается прежней. – AdamMc331

+0

Да, у вас все получилось, я искал продукты, проданные на 1-м этаже, но не на втором этаже. Я думал, что могу просто вытащить это с помощью двух двух соединений и не сделать еще один дополнительный запрос: D, но, похоже, я могу «т. – Eduard

+0

Нет, я так не думаю. Когда вы думаете об этом, я сказал: «Получите предметы в одной позиции, но не другие», которые просто кричат ​​подзапрос в моей голове. – AdamMc331

 Смежные вопросы

  • Нет связанных вопросов^_^