未找到 HSQLDB HAVING 对象

HSQLDB HAVING object not found

您好,我无法在 hsqldb 中使用 mysql 查询来进行单元测试。

不幸的是我不能给你看真正的代码。 我试图让它尽可能简单:

  SELECT A.id,
  (SELECT count(*) FROM SomeOtherTable) as myAlias
  FROM Orders A WHERE A.someKz = 2 HAVING 1 = myAlias;

将导致

user lacks privilege or object not found: MYALIAS

所以我的问题是,如何访问 HAVING 子句中的变量 myAlias

您可能觉得这个查询并不完整,但它非常简单。例如,有几个带有变量的复杂子选择。

更新

这个问题基本一样

SELECT A.id, (SELECT count(*) as anzahl1 FROM ABTable p WHERE p.Aid =  A.id   AND p.refNR > 0) as anz1,   (SELECT count(*) as anzahl1 FROM ABTable p WHERE p.Aid = A.id  ) as anz2,   (SELECT count(*) as anzahl1 FROM ABTable p WHERE p.Aid = A.id AND p.SID = 18 ) as anz3   FROM ABable A    WHERE
    A.someInt IN(1,2)
    AND A.someString > '20150308190127'
    AND(SELECT Count(*) FROM DTable D WHERE D.Aid = A.id ) = 0    HAVING anz1 = anz2 AND anz3 < anz2 ORDER BY someString ASC LIMIT 1;

你的例子对于HSQLDB可以这样写。它 returns 仅当订单 table 包含单行时才是结果。但是如果 1 实际上是 SELECT 列表中的另一个表达式,则需要将其写出来:

SELECT A.id, 1 as myAlias
FROM Orders A WHERE A.someKz = 2 AND (SELECT count(*) FROM Orders) = 1

SELECT A.id, A.acol * 12 as myAlias
FROM Orders A WHERE A.someKz = 2 AND (SELECT count(*) FROM Orders) = A.acol *12

您的完整查询要复杂得多。因此,您应该使用包装器 SELECT 语句编写它:

SELECT * FROM (
 SELECT A.id, (SELECT count(*) as anzahl1 FROM ABTable p WHERE p.Aid =  A.id   AND p.refNR > 0) as anz1,   (SELECT count(*) as anzahl1 FROM ABTable p WHERE p.Aid = A.id  ) as anz2,   (SELECT count(*) as anzahl1 FROM ABTable p WHERE p.Aid = A.id AND p.SID = 18 ) as anz3   FROM ABable A
 WHERE A.someInt IN(1,2)
 AND A.someString > '20150308190127'
 AND(SELECT Count(*) FROM DTable D WHERE D.Aid = A.id ) = 0
) WHERE anz1 = anz2 AND anz3 < anz2 ORDER BY someString ASC LIMIT 1;