【发布时间】:2014-03-24 08:14:01
【问题描述】:
我经常使用但从未注册过。我遇到了一个问题,我不知道如何获得正确的查询。所以首先,这个问题是参考 www.sql-ex.ru 及其 DML 部分中的练习 10。
这里是所有信息:
数据库方案由四个表组成:Product(maker, model, 类型)PC(代码,型号,速度,内存,高清,CD,价格)笔记本电脑(代码,型号, 速度,内存,高清,屏幕,价格)打印机(代码,型号,颜色,类型, 价格)表格“产品”包括有关制造商、型号的信息 编号和类型(“PC”、“笔记本电脑”或“打印机”)。假设 产品表中的型号对于所有制造商都是唯一的,并且 产品类型。每台 PC 由表“PC”中的代码唯一指定 以模型为特征(引用产品表的外键), 速度(以 MHz 为单位的处理器),RAM 总量 - ram(以 Mb 为单位), 硬盘驱动器容量 - hd(以 Gb 为单位),CD ROM 速度 - cd(例如, '4x')和价格。表“笔记本电脑”类似于 PC 之一 除了CD ROM速度,换成屏幕大小—— 屏幕(英寸)。对于“打印机”表中的每台打印机,都会被告知 打印机是否为彩色(颜色属性为“y”表示颜色 打印机;否则为“n”)、打印机类型(激光、喷射或矩阵), 和价格。
将 Product 表中的所有型号添加到 PC 表中 不在 PC 桌上。
连同上面插入的型号必须有规格:
代码应该等于型号加上插入操作前PC表中的最大代码值。
速度、RAM 和 HD 容量以及 CD 速度应该是 PC 表中所有可用对应值中的最大值。
价格应该是插入操作前PC表中所有PC的平均值。
这是我的查询:
INSERT INTO PC
SELECT
p.model + MAX(pc.code),
p.model,
MAX(pc.speed) speed,
MAX(pc.ram) ram,
MAX(pc.hd) hd,
MAX(pc.cd) cd,
AVG(pc.price) price
FROM
product p, pc pc
WHERE
type= 'pc'
AND
p.model NOT IN (SELECT model from pc)
GROUP BY
p.model
现在我得到了正确的结果,但出现以下错误:
您的查询在主数据库上生成了正确的结果集,但它失败了 第二次测试,检查数据库。 * 数据不匹配(1)
他们的常见问题解答中的意思是:
如果答案在逻辑上是正确的,它总是被认为是正确的 回答。逻辑错误答案的可能性很小 被认为是对的。判断查询是否正确 2 使用具有相同结构和不同数据的数据库。如果 系统告诉你你的查询是错误的,但你可以看到匹配 结果,这意味着您的查询在第二次给出了错误的答案 数据库。而且仍然有可能在逻辑上不正确 查询将返回正确的结果集。这种可能性可以 通过准确的数据选择或使用两个以上的数据而减少 数据库来检查查询。第二种方式吸引力较小,因为它 将需要更多时间来响应用户。让我们注意,曾经 制定的查询应始终返回正确的结果,无论 当前数据库状态。如果你有理由怀疑 查询判断的正确性,请将您的代码发送至 系统的开发者。
任何帮助将不胜感激!
【问题讨论】:
-
我看到您有一个
FROM子句,其中包含两个表product, pc但没有条件加入它们。最好这将类似于FROM product p INNER JOIN pc ON p.some_common_column = pc.some_common_column或使用您的隐式方法WHERE p.some_common_column = pc.some_common_column -
看描述,貌似
model是普通列,所以FROM product p INNER JOIN pc ON p.model = pc.model -
我试过了,但现在它消除了需要正确的最后两行。
-
您原来的
p.model NOT IN (SELECT model from pc)表明product中有行在pc中没有对应的行。LEFT JOIN应该涵盖该用例,而不是INNER JOIN。 -
感谢您的帮助。我是一个完整的 SQL 新手,所以请耐心等待。我从来没有在这里发过帖子,所以它让我失望。 Left Join 为我提供了所有结果,但最后两个结果不存在,而且对于前两个结果,它们或其他一些结果似乎在整个表格中为空。