获取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 *
在生产代码中被认为是不好的做法:显式命名的列要安全得多。