2017-08-24 122 views
0

我想使用子查询中的别名。使用子查询中的别名

Fruit table: 
name: is_bio: from_id: to_id: 
Apple yes  Spain  Italy 

Country table: 
id:  packaging_type: packaging_quantity: 
Italy wood box   12 
Spain paper box   18 

而且我想是这样的:

with subquery as (SELECT a.packaging_type, a.packaging_quantity, b.packaging_type, b.packaging_quantity 
FROM fruit 
    inner join country a on a.country.id = fruit.from_id 
    inner join country b on b.country.id = fruit.to_id 
WHERE fruit.name = 'Apple') 
SELECT a.packaging_quantity from subquery; 

但我得到了一个错误:

ORA-00904: "A"."PACKAGING_QUANTITY": invalid identifier 
00904. 00000 - "%s: invalid identifier" 
*Cause:  
*Action: 
Error at Line: 7 Column: 14 
+0

MySQL的,如果这是真的,你正在使用的数据库,不支持公共表表达式。 –

+0

对不起,我想点击sql,但我点击了mysql而不是那个,我忘了删除它。 – tmsblgh

+1

删除一个。从选择查询并重新运行 - 从子查询中选择packaging_quantity; ---检查这是否有效。 – Nidhi257

回答

3

这个答案的原始版本。

您的CTE有四列,但只有两列别名packaging_typepackaging_quantity。表别名不是完全限定的列名称(即包括别名或表名称),而只是列名称本身。

你需要给他们使用as不同的名称,如:

with subquery as (
     select a.packaging_type as packaging_type_a, 
      a.packaging_quantity as packaging_quantity_a, 
      b.packaging_type as packaging_type_b, 
      b.packaging_quantity as packaging_quantity_b 
     from fruit inner join 
      country a 
      on a.country.id = fruit.from_id inner join 
      country b 
      on b.country.id = fruit.to_id 
     where fruit.name = 'Apple' 
    ) 
select packaging_quantity_a 
from subquery; 
+0

我更新了我的问题,请检查一下。谢谢! – tmsblgh

+0

@tmsblgh。 。 。你应该问一个*新问题。在问题得到解答后更改问题是无礼的,因为它可以鼓励对原答案进行降低提示。 –

+0

不知道,对不起! – tmsblgh