1

我在以下查询中遇到了一些困难。

SELECT maker, speed 
FROM  
(
    SELECT * 
    FROM product 
    NATURAL JOIN laptop
) 
WHERE hd > 30;

我正在尝试查找硬盘驱动器大于 30 GB 的笔记本电脑的制造商和速度。

我有两个关系笔记本电脑和产品。笔记本电脑有元组(制造商、型号、类型),笔记本电脑有元组(型号、速度、内存、高清、屏幕和价格)。

我认为我在做什么。

  • 通过自然连接将产品与笔记本电脑连接起来,我认为并且确实(当自己提交时)给了我笔记本电脑的关系,但还有两个列制造商和类型。
  • 然后,我尝试从 HD 大小大于 30 的表中选择制造商和速度。
4

2 回答 2

3

子句中的子查询FROM需要一个表别名:

SELECT maker, speed 
FROM  
(
    SELECT * 
    FROM product 
    NATURAL JOIN laptop
  /* include an alias with AS */
) AS products_sub
WHERE hd > 30;

从文档:

table_subquery 也称为 FROM 子句中的子查询。此类子查询必须包含别名,以便为子查询结果提供表名。下面是一个简单的例子;另见第 12.2.9.8 节,“FROM 子句中的子查询”。

但是,对于您的示例,根本不需要子查询。

SELECT maker, speed 
FROM products NATURAL JOIN laptop
WHERE hd > 30;

请注意,NATURAL JOIN通常不建议使用 s,最好明确说明ON子句中加入的列。

于 2012-04-03T19:57:13.853 回答
0
 SELECT maker, speed 
  FROM products   JOIN laptop 
  WHERE hd > 30;
于 2012-04-04T06:07:40.600 回答