我经常使用但从未注册过。我有一个问题,我被困在,我不知道如何获得正确的查询。因此,首先,这个问题涉及到www.sql-ex.ru及其在DML部分的练习10。
以下是所有的信息:
数据库方案由四个表组成:产品(制造商、型号、类型)PC(代码、型号、速度、内存、hd、cd、价格)膝上型计算机(代码、型号、速度、内存、屏幕、价格)打印机(代码、型号、颜色、类型、价格)表“产品”包括制造商的信息、型号和类型('PC‘、’膝上型‘或’打印机‘)。假设Product中的型号对所有制造商和产品类型都是唯一的。由表" PC“中的代码唯一指定的每台PC的特点是模型(引用产品表的外键)、速度(在MHz中处理器的速度)、内存总数( Mb)、硬盘驱动器容量- hd (以Gb为单位)、CD速度- cd (例如,'4x')和价格。桌上的“笔记本电脑”类似于个人电脑,除了光盘速度,后者被屏幕大小的屏幕取代(以英寸为单位)。对于“打印机”表中的每台打印机,都会被告知打印机是否是彩色的(彩色打印机的颜色属性为'y‘;否则为'n')、打印机类型(激光、喷墨或矩阵)以及价格。 将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)
从他们的常见问题中可以看出:
如果答案在逻辑上是正确的,它将永远被视为正确的答案。在逻辑上错误的答案被视为正确的可能性很小。为了确定查询是否正确,使用了两个结构相同、数据不同的数据库。如果系统告诉您您的查询是错误的,但是您可以看到匹配的结果,这意味着您的查询在第二个数据库上给出了错误的答案。而且,逻辑上不正确的查询仍然有可能返回正确的结果集。这种可能性可以通过准确的数据选择或使用两个以上的数据库来检查查询来减少。第二种方式不那么吸引人,因为它需要更多的时间来响应用户。让我们注意,一旦制定了查询,无论当前数据库状态如何,都应该始终返回正确的结果。如果您对查询判断的正确性有疑问,请将您的代码发送给系统开发人员。
任何帮助都将不胜感激!
发布于 2014-04-15 11:08:26
问题是cd速度被视为字符串,而不是数字。例如,2x大于16倍。你必须让cd速度成为一个数字。
但它的末端有“x”,你得把它修剪一下。然后,可以将其转换为number,并在其上正确运行max()函数。最后,您必须将其转换为string,并将“x”重新添加到其末尾。
这是工作代码
INSERT INTO PC SELECT p.model + MAX(pc.code) code, p.model, MAX(pc.speed) speed, MAX(pc.ram) ram,MAX(pc.hd) hd, CAST(MAX(CAST(REPLACE(pc.cd,'x','')AS int))AS varchar)+'x' cd, AVG(pc.price) price FROM product p INNER JOIN pc ON p.type= 'pc' WHERE p.model NOT IN (SELECT model from pc) GROUP BY p.model<
实际上,谢谢您的代码:)我无法自己解决它。一旦我抄袭了你的,我很快就发现了这个问题:)
https://stackoverflow.com/questions/21957732
复制相似问题