我目前有这个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 :(得分: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不是二楼销售的产品之一。