我直接从SQL开发人员转移了此代码。在其中完美运行。
SELECT
a.INCIDENT_NUMBER,
a.DETAILED_DESCRIPTION,
a.INCIDENT_ROOT_CAUSE
FROM
N_EVALUATION as a
INNER JOIN N_DISPOSITION as b
ON (a.INCIDENT_NUMBER = b.INCIDENT_NUMBER)
WHERE
b.DISPOSITION_LINE_NUM in (NULL, 1) AND
a.ACTIVE_FLAG = 'Y' AND
b.ACTIVE_FLAG = 'Y' AND
a.DETAILED_DESCRIPTION IS NOT NULL
但是,当我将相同的确切代码传输到Tableau中以创建自定义SQL查询时。它给我一个错误;
与数据源通信时发生错误。坏连接:Tableau无法连接到数据源。甲骨文数据库错误907:ORA-00907:缺少右括号
这完全让我感到困惑,我不确定在这里做什么。任何帮助或建议,我们将不胜感激。我更担心缺少右括号而不是连接不良。
从AS
子句中删除FROM
。 Oracle无法识别。
此外,此条件:
b.DISPOSITION_LINE_NUM in (NULL, 1)
不做您期望的事情。如果b.DISPOSITION_LINE_NUM
为NULL
,则永远不会得出true。
您应将其替换为:
(b.DISPOSITION_LINE_NUM IS NULL OR b.DISPOSITION_LINE_NUM = 1)
否则,您的查询看起来带有括号,但是您应该将其写为:
SELECT e.INCIDENT_NUMBER, e.DETAILED_DESCRIPTION, e.INCIDENT_ROOT_CAUSE
FROM N_EVALUATION e JOIN
N_DISPOSITION d
ON e.INCIDENT_NUMBER = d.INCIDENT_NUMBER
WHERE (d.DISPOSITION_LINE_NUM IS NULL OR d.DISPOSITION_LINE_NUM = 1) AND
e.ACTIVE_FLAG = 'Y' AND
d.ACTIVE_FLAG = 'Y' AND
e.DETAILED_DESCRIPTION IS NOT NULL;
注意:
as
子句中使用FROM
。NULL
比较时要小心。最后,您的原始查询等同于:
SELECT e.INCIDENT_NUMBER, e.DETAILED_DESCRIPTION, e.INCIDENT_ROOT_CAUSE
FROM N_EVALUATION e JOIN
N_DISPOSITION d
ON e.INCIDENT_NUMBER = d.INCIDENT_NUMBER
WHERE d.DISPOSITION_LINE_NUM = 1 AND
e.ACTIVE_FLAG = 'Y' AND
d.ACTIVE_FLAG = 'Y' AND
e.DETAILED_DESCRIPTION IS NOT NULL;
这没有括号。因此,它无法返回该特定错误。