获取ORA-00918:列定义不明确:运行此SQL:

SELECT *
FROM
  (SELECT DISTINCT(coaches.id),
    people.*,
    users.*,
    coaches.*
  FROM "COACHES"
  INNER JOIN people ON people.id = coaches.person_id
  INNER JOIN users ON coaches.person_id = users.person_id
  LEFT OUTER JOIN organizations_users ON organizations_users.user_id = users.id
) WHERE rownum <= 25

有什么建议吗?

最佳答案

查询的投影只能具有一个给定名称的实例。如WHERE子句所示,您有几个表,其中的一列称为ID。由于您选择的是*,因此您的投影将有几列称为ID。否则,如果不是因为编译器 throw ORA-00918,就应该这样做。

解决方案非常简单:您将必须扩展投影以显式选择命名列。然后,您可以省略重复的列,仅保留(说)COACHES.ID或使用列别名:coaches.id as COACHES_ID

也许您会喜欢上很多类型的输入,但这是唯一的方法。如果可以的话,SELECT *在生产代码中被认为是不好的做法:显式命名的列要安全得多。

10-05 20:15