表值用户定义的SQL函数(tab—ufn)的结果可以用作其他SQL命令中的表.

例如,我有几个SELECT个命令由UNION组合,其中每一个SELECT个命令使用JOIN,其结果是具有相同参数的tab—ufn.(这样,tab—ufn总是返回相同的结果.类似于这样:

SELECT a, b, c
  FROM table1 JOIN dbo.ufn_tab(x, y) ON <condition1>
 WHERE <condition2>
UNION
SELECT a, b, c
  FROM table2 JOIN dbo.ufn_tab(x, y) ON <condition3>
 WHERE <condition4>
UNION
SELECT a, b, c
  FROM table3 JOIN dbo.ufn_tab(x, y) ON <condition5>
 WHERE <condition6>
UNION
SELECT a, b, c
  FROM table4 JOIN dbo.ufn_tab(x, y) ON <condition7>
 WHERE <condition8>

如何避免重复调用同一tab—ufn?是否有任何方法允许捕获(而不复制)结果行集用作表?(我的意思是在其他SQL代码中,在SQL服务器上.我不想把结果放在临时表上.有可能吗?

我正在使用MS—SQL(其中几个,不是很老的版本).

推荐答案

您可以先合并表,然后根据结果进行合并.

SELECT DISTINCT
  a, b, c
FROM (
    SELECT t1.SomeColumn
    FROM table1 t1
    WHERE <condition2>

    UNION ALL

    SELECT t2.SomeColumn
    FROM table2 t2
    WHERE <condition4>

    UNION ALL

    SELECT t3.SomeColumn
    FROM table3 t3
    WHERE <condition6>

    UNION ALL

    SELECT t4.SomeColumn
    FROM table4 t4
    WHERE <condition8>
) t
JOIN dbo.ufn_tab(x, y) ON <condition7>

UNION意味着DISTINCT,而UNION ALL不意味着,所以你需要DISTINCT在外面.如果没有必要的话,就把它go 掉.

Sql相关问答推荐

如何从上一个值减go 值

如何转换和汇总行数

无效和不匹配的计数

有没有办法用SQL编写一条CASE语句,如果列A&>0,那么列B,列C=0

使用WHERE子句进行筛选时,SQL SELECT查询返回总计数

PostgreSQL:使用JSONB中的字段使用jsonb_to_Records()填充记录

有没有办法在Postgres中存储带有时区的时间戳,而不将其转换为UTC

冲突查询的UPDATE时违反非空约束

如何用客户名称计算sum(dr)和sum(cr)

通过UPDATE SELECT更新表时出现问题

按二维数组的第一个元素排序

错误:postgresql 中缺少表评级的 FROM 子句条目

将varchar (7)列转换为datetime

为重复的项目编号显示正在处理

使用日期和间隔作为键加入 Athena 上的表?

以 15 分钟为间隔的使用情况SQL 查询

在 MySql 数据库中的两个日期之间搜索

根据开始/结束标记将 GROUP_ID 分配给行

PostgreSQL Select 具有两列的自引用

在时态表和非时态表之间使用 EXCEPT 的 SQL 子查询给出表达式错误数