如何在Netezza中使用Not Exists

时间:2016-04-12 18:06:39

标签: sql netezza correlated-subquery not-exists nested-query

我在Netezza有3张桌子。

表1:商店

// Forward declarations.
void Add();
void Divide();
void Multiply();
void Subtract();
//...
switch(menu_choice)
{
    case '*':  Multiply(); break;
    case '+':  Add(); break;
    case '/':  Divide(); break;
    case '-':  Subtract(); break;
    default: // for you to implement
}

表2:城市

CREATE TABLE STORES
(
    STORE_NAME CHARACTER VARYING(10),
    STORE_TYPE CHARACTER VARYING(10)
);

表3:CITIES_STORES

CREATE TABLE CITIES
(
    CITY CHARACTER VARYING(10)
);

我需要找到所有城市中存在的store_type。所以我试图通过以下方式做到这一点。如果是特定的, CREATE TABLE CITIES_STORES ( STORE_TYPE CHARACTER VARYING(10), CITY CHARACTER VARYING(10) ); (显示在store_type表格中),我找不到Stores不存在的任何州,那么store_type就是我的答案。

我编写了以下查询并在Netezza中运行:

store_type

但它出现错误

  

错误:(2)不支持这种形式的相关查询 - 请考虑   重写

请告诉我哪里出错了。这是Netezza数据库的任何问题吗?

1 个答案:

答案 0 :(得分:0)

一般来说,Netezza中的相关子查询是个坏主意。有很多好的资源可以表明这一点。事实上,Netezza尝试确定equivalent join syntax for you而不是按照书面形式执行语句。如果不能,则会出现错误。

要绕过它,只需在第一次写出等效的连接。

select distinct
  store_type
from
  stores str
  left outer join cities_stores cts using (store_type)
  left outer join cities cit using (city)
where
  city is null

注意:您说您想要查找所有城市中都存在的store_type,但您的语句会返回存在于任何城市中的store_type城市。我重写了你的SQL,而不是你在问题中指出的那些。