2016-04-12 10 views
1

Netezzaには3つのテーブルがあります。NetezzaでNot Existsを使用する方法

表1:STORES

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

表2:CITIES

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

表3:私はすべての都市に存在するstore_typeを見つける必要があり

CREATE TABLE CITIES_STORES 
(
    STORE_TYPE CHARACTER VARYING(10), 
    CITY CHARACTER VARYING(10) 
); 

CITIES_STORES 。だから私はこれを次のようにしようとしていました。具体的には store_typeStoresの表にあります)の場合は、store_typeが存在しない状態は見つかりません。store_typeは私の答えです。

私は、次のクエリを書き、Netezzaの中で実行します。

select distinct store_type from stores 
where not exists 
(select * from cities 
where not exists 
(select * from cities_stores 
where cities_stores.city=cities.city 
and cities_stores.store_type=stores.store_type)); 

をそれは私が間違っていたところを教えてください

ERROR: (2) This form of correlated query is not supported - consider rewriting

としてエラーを与えています。これはNetezzaデータベースの問題ですか?

答えて

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を書き換えました。

関連する問題