文档文档

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

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

连接类型

支持以下连接类型

连接示例表

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

prod_line
timestationproduced
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
errors
timestationlevelmessage
2022-01-01T10:00:00ZB1warn需要维护
2022-01-01T11:00:00ZB1crit站点离线

INNER JOIN

内部连接(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
内部连接结果
timestationproducedtimestationlevelmessage
2022-01-01T10:00:00ZB1562022-01-01T10:00:00ZB1warn需要维护
2022-01-01T11:00:00ZB12022-01-01T11:00:00ZB1crit站点离线

LEFT [OUTER] JOIN

左外连接(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
左外连接结果
timestationproducedtimestationlevelmessage
2022-01-01T08:00:00ZB126
2022-01-01T09:00:00ZB154
2022-01-01T10:00:00ZB1562022-01-01T10:00:00ZB1warn需要维护
2022-01-01T11:00:00ZB12022-01-01T11:00:00ZB1crit站点离线
2022-01-01T12:00:00ZB182

RIGHT [OUTER] JOIN

右外连接(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
右外连接结果
timestationproducedtimestationlevelmessage
2022-01-01T10:00:00ZB1562022-01-01T10:00:00ZB1warn需要维护
2022-01-01T11:00:00ZB12022-01-01T11:00:00ZB1crit站点离线

FULL [OUTER] JOIN

全外连接(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
全外连接结果
timestationproducedtimestationlevelmessage
2022-01-01T08:00:00ZB126
2022-01-01T09:00:00ZB154
2022-01-01T10:00:00ZB1562022-01-01T10:00:00ZB1warn需要维护
2022-01-01T11:00:00ZB12022-01-01T11:00:00ZB1crit站点离线
2022-01-01T12:00:00ZB182

排查连接问题

对未限定字段的引用含糊不清

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

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

此页面是否有帮助?

感谢您的反馈!


InfluxDB 3.8 新特性

InfluxDB 3.8 和 InfluxDB 3 Explorer 1.6 的主要增强功能。

查看博客文章

InfluxDB 3.8 现已适用于 Core 和 Enterprise 版本,同时发布了 InfluxDB 3 Explorer UI 的 1.6 版本。本次发布着重于操作成熟度,以及如何更轻松地部署、管理和可靠地运行 InfluxDB。

更多信息,请查看

InfluxDB Docker 的 latest 标签将指向 InfluxDB 3 Core

在 **2026 年 2 月 3 日**,InfluxDB Docker 镜像的 latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。

如果使用 Docker 来安装和运行 InfluxDB,latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。例如,如果使用 Docker 运行 InfluxDB v2,请将 latest 版本标签替换为 Docker pull 命令中的特定版本标签 — 例如

docker pull influxdb:2