ClickHouse 两个表联合查
在 ClickHouse 里要实现这种「先根据表1的 uid 找到对应的 real_id,再用 real_id 去查表2」的需求,可以用 JOIN 或者 子查询 来完成。下面给你几种常见写法:
1. 使用子查询
SELECT *
FROM table2
WHERE real_id IN (
SELECT real_id
FROM table1
WHERE uid = '某个uid值'
);
这里,子查询先在 table1 中找出 real_id,然后外层查询在 table2 中取对应数据。
2. 使用 JOIN
如果你需要查出 table1 和 table2 的组合信息,推荐用 JOIN:
SELECT t1.uid, t1.real_id, t2.*
FROM table1 t1
INNER JOIN table2 t2
ON t1.real_id = t2.real_id
WHERE t1.uid = '某个uid值';
这样可以一次性拿到 uid、real_id 以及表2的全部信息。
3. 如果只需要部分字段
SELECT t2.col1, t2.col2
FROM table2 t2
INNER JOIN (
SELECT real_id
FROM table1
WHERE uid = '某个uid值'
) t1
ON t1.real_id = t2.real_id;
⚡ 注意点:
- 如果
uid不是唯一的,可能会对应多个real_id,那么返回结果也会有多行。 - 如果
table2很大,最好确保real_id上有索引(在 ClickHouse 通常用 primary key 或 skip index 来优化)。 - 如果
table1很大,并且只是偶尔查一个uid,可以考虑把real_id查出来后在应用端拼接查询,以减少 JOIN 开销。
要不要我帮你根据 你表的具体结构(字段/主键情况),写一个更适合你场景的 ClickHouse 查询?

浙公网安备 33010602011771号