我在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
)
);但是它给出了一个错误
错误:(2)不支持这种形式的关联查询--考虑重写
请告诉我哪里出了问题。这是Netezza数据库的问题吗?
发布于 2016-04-15 14:29:36
一般来说,Netezza中的相关子查询是个坏主意。有很多好的资源证明了这一点。实际上,Netezza试图确定为您等效的联接语法,而不是执行写入的语句。当它不能的时候,你就会得到那个错误。
为了绕开它,只需在第一次写等效的联接即可。
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_types。我重写了您的SQL,而不是您在问题中指出的内容。
https://stackoverflow.com/questions/36580907
复制相似问题