嵌入选择语句的问题

时间:2019-03-02 03:30:57

标签: sql postgresql

我试图在select子句中嵌入一条select语句,但收到一条错误消息。我无法理解问题所在。谁能帮我这个?我正在使用Postgres数据库。

select
r.recipetitle,
r.preparation,
rcfiltered.classname
from
(
    select
        recipeclassid,
        recipeclassdescription as classname
    from
        recipe_classes as rc
    where
        rc.classname = 'Main course'
        or rc.classname = 'Dessert'
) as rcfiltered
inner join recipes as r on rcfiltered.recipeclassid = r.recipeclassid;

错误消息是-列rc.classname不存在。

2 个答案:

答案 0 :(得分:0)

由于您正在执行以下操作:recipeclassdescription as classname,因此需要在recipeclassdescription中将列引用为WHERE clause

classname可用于子查询的外部子句中的WHERE子句。

答案 1 :(得分:0)

问题是您已重命名该列。但是,您可以大大简化查询:

select r.recipetitle, r.preparation,
       rc.recipeclassdescription as classname
from recipe_classes rc join
     recipes r
     on rc.recipeclassid = r.recipeclassid
where rc.recipeclassdescription in ('Main course', 'Dessert');

注意:

  • 不需要子查询。
  • 比较单个列时,您应该使用IN而不是重复的OR比较。
  • WHERE子句中无法识别列别名,因此您必须使用原始列名。