JOIN 子句
InfluxDB 3 Core 处于公开 Alpha 阶段
InfluxDB 3 Core 处于公开 alpha 阶段,可用于测试和反馈,但不适用于生产环境。产品和本文档都在不断完善中。我们欢迎并鼓励您提供关于 alpha 体验的输入,并邀请您加入我们的公共频道以获取更新和分享反馈。
Alpha 预期和建议
- 在 alpha 期间,我们可能会进行破坏性更改,这可能需要您删除数据并重新开始。如果您使用的数据很重要,请在其他地方保留备份副本。
- 在 alpha 期间,我们在每次合并到 InfluxDB
main
分支时都会生成新的构建版本。更改频繁,相关更新会发布到我们的公共频道。
使用 JOIN
子句基于逻辑关系将来自不同表的数据连接在一起。
语法
SELECT_clause
FROM <left_join_items>
[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER]] JOIN <right_join_items>
ON <join_condition>
[WHERE_clause]
[GROUP_BY_clause]
[HAVING_clause]
[ORDER_BY_clause]
参数
- left_join_items:在
FROM
子句中指定的一个或多个表,表示连接的左侧。 - right_join_items:在
JOIN
子句中指定的一个或多个表,表示连接的右侧。 - join_condition:
ON
子句中的谓词表达式,使用 =
(等于)比较运算符将连接左侧的列值与连接右侧的列值进行比较。值与定义的谓词匹配的行将使用指定的连接类型进行连接。
如果连接的双方都包含同名的列,则需要使用完全限定引用以防止歧义。完全限定引用使用点表示法来引用表名和列名——例如:表名.列名
连接类型
支持以下连接类型
连接示例表
以下示例使用以下表来说明连接方法
prod_line
time | station | produced |
---|
2022-01-01T08:00:00Z | B1 | 26 |
2022-01-01T09:00:00Z | B1 | 54 |
2022-01-01T10:00:00Z | B1 | 56 |
2022-01-01T11:00:00Z | B1 | |
2022-01-01T12:00:00Z | B1 | 82 |
errors
time | station | level | message |
---|
2022-01-01T10:00:00Z | B1 | warn | 需要维护 |
2022-01-01T11:00:00Z | B1 | crit | 站点离线 |
INNER JOIN (内连接)
内连接基于 ON
子句中定义的公共列值,将连接左侧和右侧的表中的行组合在一起。输出表中不包含没有匹配列值的行。
内连接示例
SELECT
*
FROM
prod_line
RIGHT JOIN errors ON
prod_line.time = errors.time
AND prod_line.station = errors.station
ORDER BY
prod_line.time
内连接结果
time | station | produced | time | station | level | message |
---|
2022-01-01T10:00:00Z | B1 | 56 | 2022-01-01T10:00:00Z | B1 | warn | 需要维护 |
2022-01-01T11:00:00Z | B1 | | 2022-01-01T11:00:00Z | B1 | crit | 站点离线 |
LEFT [OUTER] JOIN (左[外]连接)
左外连接返回连接左侧的所有行,并且仅在 ON
子句中定义的匹配列值的行中返回连接右侧的数据。
左外连接示例
SELECT
*
FROM
prod_line
LEFT JOIN errors ON
prod_line.time = errors.time
AND prod_line.station = errors.station
ORDER BY
prod_line.time
左外连接结果
time | station | produced | time | station | level | message |
---|
2022-01-01T08:00:00Z | B1 | 26 | | | | |
2022-01-01T09:00:00Z | B1 | 54 | | | | |
2022-01-01T10:00:00Z | B1 | 56 | 2022-01-01T10:00:00Z | B1 | warn | 需要维护 |
2022-01-01T11:00:00Z | B1 | | 2022-01-01T11:00:00Z | B1 | crit | 站点离线 |
2022-01-01T12:00:00Z | B1 | 82 | | | | |
RIGHT [OUTER] JOIN (右[外]连接)
右外连接返回连接右侧的所有行,并且仅在 ON
子句中定义的匹配列值的行中返回连接左侧的数据。
右外连接示例
SELECT
*
FROM
prod_line
RIGHT JOIN errors ON
prod_line.time = errors.time
AND prod_line.station = errors.station
ORDER BY
prod_line.time
右外连接结果
time | station | produced | time | station | level | message |
---|
2022-01-01T10:00:00Z | B1 | 56 | 2022-01-01T10:00:00Z | B1 | warn | 需要维护 |
2022-01-01T11:00:00Z | B1 | | 2022-01-01T11:00:00Z | B1 | crit | 站点离线 |
FULL [OUTER] JOIN (全[外]连接)
全外连接返回连接左侧和右侧的所有数据,并将 ON
子句中定义的匹配列值的行组合在一起。在连接的各个侧面上不可用的数据为 NULL。
全外连接示例
SELECT
*
FROM
prod_line
FULL JOIN errors ON
prod_line.time = errors.time
AND prod_line.station = errors.station
ORDER BY
time
全外连接结果
time | station | produced | time | station | level | message |
---|
2022-01-01T08:00:00Z | B1 | 26 | | | | |
2022-01-01T09:00:00Z | B1 | 54 | | | | |
2022-01-01T10:00:00Z | B1 | 56 | 2022-01-01T10:00:00Z | B1 | warn | 需要维护 |
2022-01-01T11:00:00Z | B1 | | 2022-01-01T11:00:00Z | B1 | crit | 站点离线 |
2022-01-01T12:00:00Z | B1 | 82 | | | | |
连接问题排查
对非限定字段的模糊引用
如果列在连接的双方都存在,并且在 SELECT
、ON
、WHERE
、HAVING
、GROUP BY
或 ORDER BY
子句中使用,则必须使用完全限定引用。例如,如果连接的双方都有 time
列,并且您想显式选择一个 time 列,则必须指定使用连接哪一侧的 time 列
SELECT
prod_line.time,
produced,
message,
FROM
prod_line
INNER JOIN errors ON
-- ...
支持和反馈
感谢您成为我们社区的一份子!我们欢迎并鼓励您提供关于 InfluxDB 3 Core 和本文档的反馈和错误报告。要查找支持,请使用以下资源
拥有年度或支持合同的客户可以联系 InfluxData 支持。