【问题标题】:Issue with sql join with product/printer exercices产品/打印机练习的 sql 连接问题
【发布时间】:2014-12-31 17:14:19
【问题描述】:

Relations:

  • 产品(制造商、型号、类型)
  • 笔记本电脑(型号、价格、速度、内存、高清、屏幕)
  • PC(型号、价格、速度、内存、高清)
  • 打印机(型号、价格、颜色、价格)

我现在正在寻找最便宜的彩色打印机的制造商

我的查询:

select maker, price from
product join printer 
on product.model=printer.model
where color='y' and price <= all(select price from printer where color='y')

结果是正确的;但是错误消息是

您的查询在第一个(可用)上返回了正确的数据集 数据库,但在第二次检查时返回了不正确的数据集 数据库。 * 错误的记录数(减去 2)

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    这应该为你做:

    SELECT Prd.Maker, Pri.Price
    FROM Product Prd
    INNER JOIN Printer Pri
        ON Prd.model = Pri.model
    WHERE Pri.price = (
            SELECT MIN(Price)
            FROM Printer
            WHERE Color = 'Y'
            )
        AND Pri.Color = 'Y'
    

    尝试使用ALL 会使事情变得过于复杂。只需使用一个简单的子查询即可返回彩色打印机的最低价格。

    【讨论】:

    • 结果是正确的,和我的一样。错误信息还是一样
    • @Bob 错误信息?您收到我的查询错误消息?
    【解决方案2】:

    更简单的方法是使用Top 关键字和order by 来查找最低价格的打印机。这将避免Sub query

    将结果与product 表连接起来以找到maker

    SELECT a.maker,b.price
    FROM   product a
           JOIN(SELECT TOP 1 price,
                             model
                FROM   printer
                WHERE  color = 'y'
                ORDER  BY price ASC) b
             ON a.model = b.model 
    

    更新:对于 Mysql 使用这个。

    SELECT a.maker,b.price
    FROM   product a
           JOIN(SELECT  price,
                             model
                FROM   printer
                WHERE  color = 'y'
                ORDER  BY price ASC limit 1) b
             ON a.model = b.model 
    

    【讨论】:

    • 您应该在顶部添加 b.price。即使那样,我得到了正确的结果,但同样的错误信息
    • @Bob 实际上你在哪里运行这个查询。 SSMS 不会出现此错误
    • 我使用的是sql-ex.ru,我认为它是 MySQL 5.5.11、PostgreSQL 9.0 和 Oracle Database 11g
    • @Bob 能否分享一下这两张有问题的表的样本数据。顺便说一句,为什么这个问题被标记为Sql Server
    猜你喜欢
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多