如何在一个组中查找产品而不在另一个组中查找产品

时间:2014-11-21 15:32:36

标签: mysql array-difference

我目前有这个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

我的想法是看看哪些产品在一楼出售但不在二楼出售。我设法在第一时间销售所有产品,但我怎样才能摆脱第二个产品?

我的想法是让所有产品都在两个楼层上销售,并删除所售产品的清单,并从一楼的所有产品列表中删除,但我不知道该怎么做。

1 个答案:

答案 0 :(得分: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不是二楼销售的产品之一。