Documentation

JOIN 子句

使用 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_conditionON 子句中的谓词表达式,它使用 =(等于)比较运算符将连接左侧的列值与连接右侧的列值进行比较。值与定义的谓词匹配的行使用指定的连接类型进行连接。

如果连接的双方都包含同名的列,则需要使用完全限定的引用以避免歧义。完全限定的引用使用点表示法来引用表名和列名,例如:table_name.column_name

连接类型

支持以下连接类型

连接示例表

以下示例使用下表说明连接方法

prod_line
timestation产量
2022-01-01T08:00:00ZB126
2022-01-01T09:00:00ZB154
2022-01-01T10:00:00ZB156
2022-01-01T11:00:00ZB1
2022-01-01T12:00:00ZB182
错误
timestation级别消息
2022-01-01T10:00:00ZB1警告需要维护
2022-01-01T11:00:00ZB1严重站点离线

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
内连接结果
timestation产量timestation级别消息
2022-01-01T10:00:00ZB1562022-01-01T10:00:00ZB1警告需要维护
2022-01-01T11:00:00ZB12022-01-01T11:00:00ZB1严重站点离线

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
左外连接结果
timestation产量timestation级别消息
2022-01-01T08:00:00ZB126
2022-01-01T09:00:00ZB154
2022-01-01T10:00:00ZB1562022-01-01T10:00:00ZB1警告需要维护
2022-01-01T11:00:00ZB12022-01-01T11:00:00ZB1严重站点离线
2022-01-01T12:00:00ZB182

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
右外连接结果
timestation产量timestation级别消息
2022-01-01T10:00:00ZB1562022-01-01T10:00:00ZB1警告需要维护
2022-01-01T11:00:00ZB12022-01-01T11:00:00ZB1严重站点离线

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
全外连接结果
timestation产量timestation级别消息
2022-01-01T08:00:00ZB126
2022-01-01T09:00:00ZB154
2022-01-01T10:00:00ZB1562022-01-01T10:00:00ZB1警告需要维护
2022-01-01T11:00:00ZB12022-01-01T11:00:00ZB1严重站点离线
2022-01-01T12:00:00ZB182

排查连接问题

对非限定字段的歧义引用

如果列存在于连接的双方,并且在 SELECTONWHEREHAVINGGROUP BYORDER BY 子句中使用,则必须使用完全限定的引用。例如,如果连接的双方都有 time 列,并且您想显式选择一个 time 列,则必须指定要使用连接哪一侧的 time 列

SELECT
  prod_line.time,
  produced,
  message,
FROM
  prod_line
INNER JOIN errors ON
  -- ...

此页面是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像现在这样使用它,而无需对代码进行任何更改。

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、近实时数据引擎,可以实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 构建在 Core 的基础上,增加了高可用性、读取副本、增强的安全性以及数据压缩功能,以实现更快的查询和优化的存储。InfluxDB 3 Enterprise 的免费层级可供非商业家庭或业余爱好者使用。

有关更多信息,请查看