0

我有products table作为 product_id int 类型的主键约束

具有非空约束的产品名称 varchar

示例数据如下

1.  100, 'Nokia'
2.  200, 'IPhone'
3.  300, 'Samsung'
4.  400, 'LG'

sales table

具有 int 类型的 SALE_ID,

产品表的 int 类型引用的 PRODUCT_ID(外键)

带有 int 类型的年份

int 类型的数量

PRICE int 类型检查价格 > 0

示例数据如下

 1, 100, 2010, 25, 5000
 2, 100, 2011, 16, 5000
 3, 100, 2012, 8,  5000
 4, 200, 2010, 10, 9000
 5, 200, 2011, 15, 9000
 6, 200, 2012, 20, 9000
 7, 300, 2010, 20, 7000
 8, 300, 2011, 18, 7000
 9, 300, 2012, 20, 7000

查询 如何查找未售出的产品?

4

2 回答 2

1

@普拉文

您的解决方案有点不正确,因为有no NOT NULL constraint on product_id销售。它构建一个列表,然后在列表上过滤,但该列表可能包含 NULL,并且 2 NOT IN (1, NULL) 为 NULL,在 WHERE 中被视为 false。

最好将其重新表述为

WHERE NOT EXISTS (SELECT 1 FROM sales s WHERE s.product_id = products.product_id)

查询 ::

select * 
from products 
WHERE NOT EXISTS (SELECT 1
                     FROM sales s WHERE s.product_id = products.product_id);

@igor-romanchenko

于 2013-07-23T07:08:51.823 回答
0
select * 
from products 
where product_id not in (select PRODUCT_ID 
                         from sales 
                         where PRODUCT_ID  is not null);
于 2013-07-22T12:42:57.267 回答