【问题标题】:Invalid Identifier SQL无效的标识符 SQL
【发布时间】:2013-05-02 00:46:53
【问题描述】:

所以我有这个:

SELECT p.plantnaam,o.levcode,o.offerteprijs
FROM plant p, offerte o
JOIN (SELECT plantcode , MIN(offerteprijs) AS offprijs 
      FROM offerte
      GROUP BY plantcode) s
  ON s.plantcode = p.plantcode
  AND s.offprijs = o.offerteprijs
ORDER BY p.plantnaam,l.levcode

显然在第 6 行,p.plantcode 突然神奇地变成了一个无效标识符。为什么是这样?为什么在那之前同一张桌子上的所有其他人都很好?

【问题讨论】:

    标签: oracle plsql oracle11g


    【解决方案1】:

    问题是您正在混合 JOIN。您有隐式和显式连接。带有 ON 子句的显式 JOIN 语法比带有逗号的隐式连接具有更高的优先级。因此,plantofferte 表的别名在 ON 子句中将不可用。尝试始终使用相同的 JOIN 类型:

    SELECT p.plantnaam, o.levcode, o.offerteprijs
    FROM 
    (
      SELECT plantcode , MIN(offerteprijs) AS offprijs 
      FROM offerte
      GROUP BY plantcode
    ) s
    INNER JOIN plant p
       ON s.plantcode = p.plantcode
    INNER JOIN offerte o
       ON s.offprijs = o.offerteprijs
    ORDER BY p.plantnaam, l.levcode
    

    【讨论】:

    • 那为什么这个能完美运行呢?:SELECT p.soort, p.plantnaam, p.hoogte FROM plant p JOIN (SELECT soort , MAX(hoogte) AS hoogste FROM plant GROUP BY soort) s ON s.soort = p.soort AND s.hoogste = p.hoogte ORDER BY p.soort
    • @Smileynator 因为您没有使用逗号连接表格。您在该版本中使用的是 ANSI 连接语法。
    • 哦,你的意思是在我的 FROM 语句中我只定义了 1 个表而不是多个表?
    • @Smileynator 是的。查看我的版本与您的版本的区别。每个表和子查询由JOIN 分隔。首先使用JOINON,因为您的版本在FROM 中使用多个表,然后别名不可用。
    • 我想我永远不会真正理解 SQL,或者至少这些连接。但是我想我可以解决这个问题。我会阅读更多关于连接的信息,它们仍然让我感到困惑。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多