【问题标题】:Unable to do a JOIN when having the same table with two different names具有两个不同名称的同一个表时无法进行 JOIN
【发布时间】:2021-09-29 05:23:43
【问题描述】:
SELECT count(a.id) from hist a, hist b
JOIN acq c on acq.id = a.id
where a.status = 'OK'
and b.status = 'passed'
and a.id = b.id
and c.src = 'g9x'
and a.timestamp - b.timestamp > 30

我用这些参数计算所有值,但我认为问题是因为我两次命名表 hist,这是因为我在该表中减去两个参数以查看它是否大于 30 这是唯一的这样做的方法,因为这是唯一具有这些值的表,我正在尝试加入另一个表以获取最后一个值。

如何通过两次命名表来执行此操作?

我收到此错误。

"A.id 无效标识符 ORA-00904

【问题讨论】:

  • 您确定您的表有id 列吗?如果你做这样的事情会发生什么:select id from hist where rownum = 1?如果您遇到错误,请告诉我们。有很多事情可能会导致这种情况,但首先要弄清楚到底是什么问题;这将是重要的第一步。
  • 这是一个常见问题,逗号的优先级低于关键字连接。
  • @philipxy - 这与 OP 的问题有什么关系?
  • @mathguy 它给出了错误的原因并指出合理的研究排除了该帖子。
  • @philipxy - 错误是“无效标识符”。该特定错误与您所说的有什么关系?如果你真的认为它们是相关的,请说明你为什么相信(链接到文档,或一个小例子等)

标签: sql oracle join


【解决方案1】:

不要使用旧的逗号样式连接语法进行连接,而是在两个 hist 表之间使用标准语法,例如 INNER JOIN。所以您的查询将如下所示:

SELECT count(a.id) 
from hist a
INNER JOIN hist b
  ON a.id = b.id
JOIN acq c 
  on c.id = a.id
where a.status = 'OK'
  and b.status = 'passed'
  and c.src = 'g9x'
  and a.timestamp - b.timestamp > 30

【讨论】:

  • 哦,抱歉,它现在适用于该列,问题是第 5 行是 C.id = A.id 并且它也说标识符无效
  • @user5428151 您确定该列存在吗?这个演示表明语法应该可以工作 - sqlfiddle.com/#!4/76300/2/0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-12
  • 2011-07-19
  • 2015-02-19
  • 2013-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多