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

如果你需要查出 table1table2 的组合信息,推荐用 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值';

这样可以一次性拿到 uidreal_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 keyskip index 来优化)。
  • 如果 table1 很大,并且只是偶尔查一个 uid,可以考虑把 real_id 查出来后在应用端拼接查询,以减少 JOIN 开销。

要不要我帮你根据 你表的具体结构(字段/主键情况),写一个更适合你场景的 ClickHouse 查询?

posted @ 2025-09-07 18:38  X1OO  阅读(26)  评论(0)    收藏  举报