sql with 子查询问题

SQL 是这样的

WITH t AS (
SELECT id, name, type1, type2
FROM dim_table
WHERE type1 = 'xxx'
)

SELECT id, name, type2, COUNT(*)
FROM t
INNER JOIN fact_table f ON t.id = f.dim_id
WHERE f.dim_id IN (SELECT id FROM t)
GROUP BY id, name, type2 

这样做的想法是,先查询目标 dim_table 的 id, 并且在 fact_table.dim_id 走索引直接查询,避免表 fact_table 和维表 dim_table 全表关联。
【遇到的问题】sql 执行报错,好像 tidb 不支持 where 条件里用 with 子查询的这类用法。

后续没有出现,也可能是当时sql写法问题。之前的报错记不太清,好像是有 dexxx one row 定位到 子查询的那一行。

报错什么问题,tidb支持你的写法,我随便拿点数据测了下类似sql没问题
with t as
(select draw_id from game_draw where draw_no=‘23011’)
select * from t
INNER JOIN game_draw_fund g ON t.draw_id=g.draw_id
where g.draw_id in (select draw_id from t)

报什么错?

inner join的关联条件跟where不是重复了吗
这个where加跟不加好像是一样的结果吧?

我试过是支持with子查询的,你把报错截图发出来

不会报错啊。。。

这个with的写法叫做CTE.从6.1开始支持,所以是你的tidb版本低了。

5.1开始支持的不是6.1
WITH | PingCAP 文档中心

1 个赞

:+1:
非常严谨,那是为啥我就不知道了。

有错误时一定要把错误发出来

1 个赞

我现在5.4的版本是可以用with的

1 个赞

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。