使用Teradata限制子查询中的行数

查尔斯

我是Teradata的新手,现在遇到的问题是我以前使用的数据库所没有的。基本上,我试图减少where子句中的子查询中返回的行数。我以前使用ROWNUM函数没问题。

我以前的查询是这样的:

SELECT * FROM myTable
WHERE field1 = 'foo' AND field2 in(
    SELECT field2 FROM anotherTable
    WHERE field3 = 'bar' AND ROWNUM<100);

由于我无法在TD中使用ROWNUM,因此我一直在寻找等效的函数,或者至少寻找可以使我到达所需位置的函数,即使它们并不完全等效。我找到并尝试了:ROW_NUMBER,TOP和SAMPLE。

我尝试了ROW_NUMBER(),但是Teradata不允许WHERE子句中的分析函数。我尝试了TOP N,但子查询中不支持此选项。我尝试了SAMPLE N,但子查询也不支持它。

所以...我不得不承认我现在有点卡住,想知道是否有任何解决方案可以限制我使用Teradata的子查询中返回的行数,这与我所做的非常相似到现在?此外,如果没有任何查询,如何将查询构建为与Teradata正确配合使用的方式有所不同?

谢谢!

牙齿

子查询中SAMPLE或TOP的有限用法可能是因为这可能是相关子查询。

但是有两种解决方法。

将SAMPLE或TOP放在子查询的派生表中(因此无法再进行关联):

SELECT * FROM myTable
WHERE field1 = 'foo'
AND field2 IN (
     SELECT * FROM
       ( SELECT field2 FROM anotherTable -- or TOP 100
         WHERE field3 = 'bar'  SAMPLE 100
       ) AS dt
    );

或将其重写为对派生表的联接:

SELECT * FROM myTable
JOIN ( SELECT DISTNCT field2 FROM anotherTable -- can't use TOP if you need DISTINCT 
         WHERE field3 = 'bar' SAMPLE 100
       ) AS dt
WHERE field1 = 'foo'
AND myTable.field2 = dt.field1;

没有ORDER BY的TOP与ROWNUM非常相似。它根本不是随机的,但是第二次运行它可能仍会返回不同的结果集。

SAMPLE实际上是随机的,每次返回不同的结果。

ROW_NUMBER也可以使用QUALIFY代替WHERE,但是OLAP函数始终需要一些ORDER BY,因此开销更大。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

子查询中的限制

来自分类Dev

限制WHERE子句中使用COUNT(*)函数作为子查询返回的行数

来自分类Dev

限制SQL查询中每个ID的行数

来自分类Dev

从Teradata中的子查询块合并全部

来自分类Dev

使用SQLAlchemy限制子查询

来自分类Dev

使用JXLS限制内存中的行数

来自分类Dev

限制从 oracle 和 postgres 中的查询返回的行数

来自分类Dev

使用子查询进行外部联接会更改mysql中的行数

来自分类Dev

限制UITextView中的行数

来自分类Dev

限制UITextView中的行数

来自分类Dev

限制页面中的行数

来自分类Dev

使用DQL在Doctrine / Symfony中具有限制的子查询

来自分类Dev

使用CSS限制要在页面中打印的表中的行数

来自分类Dev

子查询中的SQL SERVER复制行数据

来自分类Dev

mysql子查询限制也限制了父查询

来自分类Dev

限制使用WebI在BO中返回的结果或行数

来自分类Dev

使用查询中给定的行数生成SQL查询

来自分类Dev

由于Oracle物化视图的限制,在Select中重写子查询

来自分类Dev

mysql中的性能与子查询和限制联接

来自分类Dev

JPA:限制查询结果数| 返回的行数

来自分类Dev

SPARQL使用具有限制的子查询

来自分类Dev

限制PyQt QCompleter中的行数

来自分类Dev

限制ReportViewer中每页的行数

来自分类Dev

限制MySQL中的行数总和

来自分类Dev

使用子查询中的别名

来自分类Dev

使用变量来限制行数

来自分类Dev

Teradata,子查询以防万一

来自分类Dev

在Teradata中查询运行结果

来自分类Dev

在子查询中使用查询中的列