我正在使用一个针对DB2大型机数据库的报告工具。当我检查它生成的SQL时,它具有以下(非常简化)格式:
SELECT
AL1.Field1,
AL1.Field2
FROM
(
--#region 1
Big SQL goes here
--#endregion end region 1
) AL1
(
Field1,
Field2
)
WHERE
(AL1.Field1<>0)
我不熟悉DB2 SQL,因为我使用的是T-SQL。这部分让我困惑:
AL1
(
Field1,
Field2
)
表达上述SQL的“T-SQL”方式基本上如下吗?
SELECT
AL1.Field1,
AL1.Field2
FROM
(
--#region 1
Big SQL goes here
--#endregion end region 1
) AL1
WHERE
(AL1.Field1<>0)
答案 0 :(得分:3)
这部分语法称为Correlation Clause。它允许您为嵌套选择中的列提供替代名称。当计算大SQL中的列时,这尤其有用,因为它允许您像命名它们一样引用这些列。
tsql中的相应语法是Common Table Expressions。您的查询将变为:
WITH AL1 (Field1, Field2) AS (
--#region 1
Big SQL goes here
--#endregion end region 1
)
SELECT Field1, Field2
FROM AL1
WHERE AL1.Field1 <> 0
答案 1 :(得分:2)
您需要重新构建查询以查看逻辑:
SELECT
AL1.Field1,
AL1.Field2
FROM
(
--#region 1
Big SQL goes here
--#endregion end region 1
) AL1 (Field1, Field2)
此查询意味着,创建临时表“AL1”,此表中的数据将来自大SQL,并且您将列名分配给此表(Field1,Field2),因此您可以在{{{{{ 1}}或WHERE
当您的BIG SQL包含一些函数时,这很有用,例如:
SELECT
引用 ??? 外部子查询,你可以在select中为每一列添加select ???
from (
select max(a) + min(b) from othertbl
) temptbl
,或者你可以使用AS
并稍后引用temptbl.mysupercol < / p>