TDengine两张超级表关联查询报错,如何正确编写SQL语句
TDengine 超级表关联查询正确实现
报错原因梳理
- 第一条SQL的问题:TDengine 超级表关联查询强制要求关联条件必须包含标签列的等值匹配,你只加了时间戳
ts的关联条件,不符合规则,所以触发super table join requires tags column报错。 - 第二条SQL的问题有两处:一是多表关联的语法错误,不能用
and连接两张表,应该用where或者JOIN ON定义关联条件;二是你的标签列名定义为t,SQL里写成了tag,列名不匹配触发语法错误。
正确实现写法
写法1:逗号分隔表语法
SELECT * FROM s1, s2 WHERE s1.t = s2.t AND s1.ts = s2.ts;
写法2:标准JOIN语法(推荐,可读性更强)
SELECT * FROM s1 INNER JOIN s2 ON s1.t = s2.t AND s1.ts = s2.ts;
额外注意事项
- 实际使用时建议避免直接用
*返回所有字段,相同字段名需要加表前缀别名区分,示例:
SELECT s1.ts, s1.v AS s1_value, s2.v AS s2_value, s1.t AS tag FROM s1 JOIN s2 ON s1.t = s2.t AND s1.ts = s2.ts;
- 当前TDengine 3.x版本仅支持超级表的内连接,暂不支持左连接、右连接等其他连接类型。
内容的提问来源于stack exchange,提问作者hook capt
相关产品推荐
相关产品推荐

