我使用下面提到的查询得到了错误的答案.有人能解释一下原因吗



产品

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。

相关内容

最新更新