产品
product_id是该表的主键。
表:销售
此表没有主键,可以有重复的行。product_id是product表的外键。
编写一个SQL查询,报告购买了S8但没有购买iPhone的买家。
请注意,S8和iPhone是产品表中的产品。
查询结果格式如下所示:
产品表:
Product_id | Product_name | Unit_price(1,S81000(,(2,G4800(,(3,iphone1400(
销售表格:
|seller_id|product_id|buyer_id|sale_date|数量|价格|
(1,1,12019-01-212000(
(1,2,22019-02-17,1800(
(2,1,32019-06-02,1800(
(3,3,32019-05-13,22800(
结果表:
|buyer_id|
|1|
id为1的买家买了一台S8,但没有买iPhone。id为3的买家同时购买了这两个。
我的查询:
SELECT
distinct buyer_id
FROM
sales
WHERE product_id=1 and buyer_id not in (SELECT
buyer_id
FROM
sales
WHERE
product_id = 3);
有效的查询:
select distinct buyer_id
from Sales inner join Product
where Sales.product_id = Product.product_id
and product_name = 'S8'
and buyer_id not in
(select distinct buyer_id
from Sales inner join Product
where Sales.product_id = Product.product_id
and product_name = 'iPhone')
是什么让您认为您的查询返回了错误的结果,而另一个返回了正确的结果?两者都将返回相同的结果:
买方id
1
没有?
它们之间的区别在于,第一个是直接使用product_id,因此不需要检查product表(但在现实世界中不现实,没有人会依赖这样的固定id并记住它们(。问题是说"S8"one_answers"iPhone",那么你应该从产品中获得ID。