首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Netezza相关查询

Netezza相关查询
EN

Stack Overflow用户
提问于 2015-01-28 12:38:32
回答 1查看 1.1K关注 0票数 2

我从Sybase迁移到Netezza,Netezza不支持这种查询。有人能告诉我怎么重写吗?

代码语言:javascript
复制
UPDATE table1 t1 
SET t1.col1=t2.col1
FROM table2 t2
WHERE t1.col2=t2.col2
AND t2.col3=(SELECT MAX(t3.col3) FROM table2 t3 WHERE t3.col2=t1.col2);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-28 21:50:38

这种相关子查询实际上将在Netezza中工作,具体取决于您的版本。

我碰巧跑了7.2,而且运行得很好。

代码语言:javascript
复制
[nz@netezza ~]$ nzrev
Release 7.2.0.3 [Build 42210]
[nz@netezza ~]$ k^C
[nz@netezza ~]$ set -o vi
[nz@netezza ~]$ nzsql -d testdb
Welcome to nzsql, the IBM Netezza SQL interactive terminal.

Type:  \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit
TESTDB.ADMIN(ADMIN)=> UPDATE table1 t1
TESTDB.ADMIN(ADMIN)-> SET t1.col1=t2.col1
TESTDB.ADMIN(ADMIN)-> FROM table2 t2
TESTDB.ADMIN(ADMIN)-> WHERE t1.col2=t2.col2
TESTDB.ADMIN(ADMIN)-> AND t2.col3=(SELECT MAX(t3.col3) FROM table2 t3 WHERE t3.col2=t1.col2);
UPDATE 1
TESTDB.ADMIN(ADMIN)=>

不过,较近期的版本(前7.1版)无法处理这一问题。下面是如何将这个特殊情况写成连接而不是关联子查询的方法。

代码语言:javascript
复制
UPDATE table1 t1
SET t1.col1=t2.col1
FROM table2 t2,
   (
      SELECT col2,
         MAX(col3) col3
      FROM table2
      GROUP BY col2
   )
   t3
WHERE t1.col2 = t2.col2
AND t2.col2  = t3.col2
AND t2.col3  = t3.col3;

对于相关的子查询支持,7.2.0版本的文档有这样的说法。

如果选择使用关联子查询,请记住以下对相关子查询的形式和位置的限制: 您可以在WHERE子句中使用关联子查询。 您可以在内部联接条件中使用关联子查询,并使用相等的联接条件运算符。 只能以下列形式在混合关联表达式中使用关联子查询: (corr_columA,corr_columnB,.)= expr(local_columnX,local_columnY,.) 不能在SET操作中使用关联子查询(UNION、INTERSECT、operations和减号)。 不能在具有GROUP BY和with子句的聚合中使用关联子查询。 不能在ORed子句或CASE/WHEN表达式中使用关联子查询。 不能在in列表中使用相关子查询。不能在选择列表中使用相关子查询。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28192472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档