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_condition: 在ON子句中的一个谓词表达式,使用=(等于)比较操作符将联接左侧的列值与联接右侧的列值进行比较。具有与定义的谓词匹配的值的行使用指定的join type进行联接。

如果连接的两侧都包含同名的列,您需要使用完全限定引用以防止歧义。完全限定引用使用点表示法同时引用表名和列名——例如: table_name.column_name

连接类型

支持以下连接类型:

连接示例表

以下示例演示了使用以下表的连接方法:

生产线
时间站点产生
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
错误
时间车站级别消息
2022-01-01T10:00:00ZB1warn需要维护
2022-01-01T11:00:00ZB1crit站点离线

内连接

内连接根据在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
内连接结果
时间站点产生的时间站点级别消息
2022-01-01T10:00:00ZB1562022-01-01T10:00:00ZB1warn需要维护
2022-01-01T11:00:00ZB12022-01-01T11:00:00ZB1crit站点离线

左 [外] 连接

左外连接返回连接左侧的所有行,并且仅在具有匹配列值的行中从连接右侧返回数据,这些值在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
左外连接结果
时间站点产生的时间站点级别消息
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

右 [外] 连接

右外连接返回连接右侧的所有行,并且仅在左侧连接中返回具有在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
右外连接结果
时间站点产生的时间站点级别消息
2022-01-01T10:00:00ZB1562022-01-01T10:00:00ZB1warn需要维护
2022-01-01T11:00:00ZB12022-01-01T11:00:00ZB1crit站点离线

完全 [外部] 连接

全外连接返回连接左右两侧的所有数据,并将具有在ON子句中定义的匹配列值的行组合在一起。每一侧连接中不可用的数据为NULL。

完全外连接示例

SELECT
  *
FROM
  prod_line
FULL JOIN errors ON
  prod_line.time = errors.time
  AND prod_line.station = errors.station
ORDER BY
  time
完全外连接结果
时间站点产生的时间站点级别消息
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
  -- ...


Flux的未来

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

阅读更多

InfluxDB 3 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

InfluxDB 3 核心,是我们新的开源产品。 它是一个用于时间序列和事件数据的实时数据引擎。 InfluxDB 3 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始的更多信息,请查看: