我有以下查询未运行:
with countf as (
select nationid, count(*) as c from customer
group by nationid
),
maxf as ( select max(nationid) from customer )
select c.customerid, c.nationid from customer c, countf cf, maxf m
where c.nationid = cf.nationid
and cf.c = m
问题似乎是m
是记录而不是整数。但是,如果我将其作为子查询运行,如下所示:
cf.c = ( select max(nationid) from customer )
它按预期工作。我认为我使用的是 with 语句,而不是预期的方式。正在尝试
cf.c in maxf
让我假设使用WITH
生成的表不应该在WHERE
子句中使用。
我知道还有其他方法可以使用all
例如获取相同的查询。我真的只对我应该如何使用 with 语句感兴趣。我以后只能用它来SELECT
吗?
提前感谢任何形式的帮助。
这是因为条件and cf.c = m
应该如下所示
with countf as (
select nationid, count(*) as c from customer
group by nationid
),
maxf as ( select max(nationid) as max_nationid from customer )
select c.customerid, c.nationid from customer c, countf cf, maxf m
where c.nationid = cf.nationid
and cf.c = m.max_nationid
旁注:使用适当的 ANSI 样式JOIN
语法,该语法更具可读性,例如
select c.customerid,
c.nationid from customer c
join countf cf on c.nationid = cf.nationid
join maxf m on cf.c = m.max_nationid
使用记录语法:
and row(cf.c) = m