无效的标识符SQL

Smi*_*tor 1 oracle plsql oracle11g

所以我有这个:

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
Run Code Online (Sandbox Code Playgroud)

显然在第6行,p.plantcode突然神奇地成为无效的标识符.为什么是这样?为什么在那之前,完全相同的表中的所有其他人都完美无缺?

Tar*_*ryn 5

问题是你正在混合JOIN.您有隐式和显式连接.带有ON子句的显式JOIN语法比使用逗号的隐式连接具有更高的优先级.因此,ON子句中将无法使用plantofferte表的别名.尝试使用相同的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
Run Code Online (Sandbox Code Playgroud)