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)