首页 > 解决方案 > 通过使用下面提到的查询,我得到了错误的答案。有人可以解释为什么吗?

问题描述

产品

product_id 是该表的主键。

表:销售额

该表没有主键,它可以有重复的行。product_id 是 Product 表的外键。

编写一个 SQL 查询,报告购买了 S8 但没有购买 iPhone 的买家。

请注意,S8 和 iPhone 是 Product 表中的产品。

查询结果格式如下例:

产品表:

Product_id|product_name|Unit_price (1,S8,1000),(2,G4,800),(3,iphone,1400)

销售表:

|seller_id|product_id|buyer_id|sale_date|数量|价格|

(1,1,1,2019-01-21,2,2000)

(1,2,2,2019-02-17,1,800)

(2,1,3,2019-06-02,1,800)

(3,3,3,2019-05-13,2,2800)

结果表:

| 买家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')

标签: mysqlsqldatabase

解决方案


是什么让您认为您的查询返回错误结果而另一个正确结果?两者都将返回相同的结果:

买家id

1

不?

它们之间的区别是第一个是直接使用product_id,因此不需要检查产品表(但在现实世界中并不现实,没有人会依赖这样的固定ID并记住它们)。问题是“S8”和“iPhone”,那么你应该从产品中获取 ID。


推荐阅读