

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 嵌套对象查询
<a name="iot-sql-nested-queries"></a>

您可以使用嵌套 SELECT 子句来查询数组和内部 JSON 对象中的属性。SQL 版本 2016-03-23 及更高版本支持。

请考虑以下 MQTT 消息：

```
{ 
    "e": [
        { "n": "temperature", "u": "Cel", "t": 1234, "v": 22.5 },
        { "n": "light", "u": "lm", "t": 1235, "v": 135 },
        { "n": "acidity", "u": "pH", "t": 1235, "v": 7 }
    ]
}
```

**Example**  
您可以使用以下规则将值转换为新数组。  

```
SELECT (SELECT VALUE n FROM e) as sensors FROM 'my/topic'
```

该规则生成以下输出。

```
{
    "sensors": [
        "temperature",
        "light",
        "acidity"
    ]
}
```

**Example**  
通过使用相同的 MQTT 消息，您还可以使用以下规则查询嵌套对象中的特定值。  

```
SELECT (SELECT v FROM e WHERE n = 'temperature') as temperature FROM 'my/topic'
```

该规则生成以下输出。

```
{
    "temperature": [
        {
            "v": 22.5
        }
    ]
}
```

**Example**  
您也可以使用更复杂的规则来平展输出。  

```
SELECT get((SELECT v FROM e WHERE n = 'temperature'), 0).v as temperature FROM 'topic'
```

该规则生成以下输出。

```
{
    "temperature": 22.5
}
```