在我们系统中搜索一些旧视图时。我遇到了一些价值函数的使用,虽然我理解它在做什么,但我一生都无法弄清楚为什么它会变得不必要地复杂。这是来自视图创建 DDL。
SELECT
...
SUBSTR(
MAX(
CHAR(
VALUE(TABLEO.TIMESTAMPFIELD, TIMESTAMP(CURRENT_DATE, CURRENT_TIME))
)
||
TABLEP.VARCHARFIELD
),
27
)
...
FROM TABLEA
INNER JOIN TABLEB ON ...
INNER JOIN TABLEC ON ...
LEFT JOIN TABLED ON ...
LEFT JOIN TABLEE ON ...
LEFT JOIN TABLEF ON ...
LEFT JOIN TABLEG ON ...
LEFT JOIN TABLEH ON ...
LEFT JOIN TABLEI ON ...
LEFT JOIN TABLEJ ON ...
LEFT JOIN TABLEK ON ...
LEFT JOIN TABLEL ON ...
LEFT JOIN TABLEM ON ...
LEFT JOIN TABLEN ON ...
LEFT JOIN TABLEO ON ...
LEFT JOIN TABLEP ON ...
LEFT JOIN TABLEQ ON ...
WHERE .
GROUP BY ...
我知道 VALUE 像 COALESCE 一样工作。SUBSTR 将只留下 VARCHAR(或 NULL)。但是如果左连接没有结果,它无论如何都会为空。
正如你可以猜到的那样,这个视图是一个非常低效的 SQL 运行位,包含所有连接
我是一名从事 BODS ETL 的 SAP 开发人员,其中数据将用于 BOBJ WEBI 报告。我们的项目 DBA 还太年轻,无法理解其背后的原因。想想这里的某个地方可能有一些更聪明的头脑。
编辑:
LEFT JOIN TABLEO
ON TABLEO.ID_NOTE = TABLEN.ID_NOTE
AND TABLEO.ID_CASE = TABLEC.ID_CASE
AND TABLEO.ID_PRSN = TABLEA.ID_PRSN
AND TABLEO.CD_FTOF_CNTC = 'C'
LEFT JOIN TABLEP
ON TABLEP.ID_WORKER_ROLE = TABLEN.ID_CR
这两个连接中的值不直接相互关联。只能间接通过其他连接结果。