2016-04-12 2 views
1

У меня есть 3 стола в Netezza.Как использовать Не существует в Netezza

Таблица 1: МАГАЗИНЫ

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

Таблица 2: ГОРОДА

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

Таблица 3: CITIES_STORES

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

мне нужно найти store_type, который присутствует во всех городах , Поэтому я пытался сделать это следующим образом. Если для конкретного, store_type (присутствует в таблице Stores), я не могу найти какое-либо состояние, в котором 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 S, которые не ни в одном из городов. Я переписал ваш SQL, а не то, что вы указали в вопросе.

Смежные вопросы