文档说明

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站 offline

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站 offline

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

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站 offline
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 v3增强功能及InfluxDB Clustered现已全面上市

包括更快的查询性能和管理工具在内的新功能,推动了InfluxDB v3产品线的进步。InfluxDB Clustered现已全面上市。

InfluxDB v3性能和功能

InfluxDB v3产品线在查询性能方面取得了显著提升,并提供了新的管理工具。这些增强包括用于监控InfluxDB集群健康状况的操作仪表板,InfluxDB Cloud Dedicated中的单点登录(SSO)支持,以及用于令牌和数据库的新管理API。

了解新的v3增强功能


InfluxDB Clustered全面上市

InfluxDB Clustered现已全面上市,为您的自管理堆栈提供了InfluxDB v3的力量。

与我们谈谈InfluxDB Clustered