【问题标题】:AWS IoT Core sql query rule - Comparing 2 object arrays returns null/undefined?AWS IoT Core sql 查询规则 - 比较 2 个对象数组返回 null/undefined?
【发布时间】:2021-06-14 03:39:40
【问题描述】:

我正在尝试比较 sql 查询中的 2 个数组。从 dynamodb 和 MQTT 代理服务器获取数据时,一切似乎都运行良好。 但是,如果我尝试比较两个数组,则不会返回任何内容或其未定义。

我的sql查询:

SELECT ts, objects, (SELECT id FROM get_dynamodb('table', 'key_name', 'key_value', 'rolearn').ids) AS db, (SELECT id from objects) as obj_ids
FROM 'subscribed/topic'
WHERE objects <> []

结果:

{
   "ts": 1615807935588,
   "objects": [
      {
         "id": 1,
         "planet": "jupiter"
      },
      {
         "id": 2,
         "planet": "mars"
      },
   ],
   "db": [
      {
         "id": 2
      },
      {
         "id": 3
      }
   ],
   "obj_ids": [
      {
         "id": 1
      },
      {
         "id": 2
      }
   ]
}

到目前为止还可以,现在我要做的就是比较“obj_ids”和“db”数组是否不同(obj_ids db),通过 aws 文档https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-operators.html#iot-sql-operators-not-eq 我可以比较这两个数组。

如果我这样做:

SELECT ts, objects, (SELECT id FROM get_dynamodb('table', 'key_name', 'key_value', 'rolearn').ids) AS db, (SELECT id from objects) as obj_ids
FROM 'subscribed/topic'
WHERE objects <> []
AND obj_ids <> db

代码不返回任何内容。我已经测试了比较硬编码到查询中的 2 个对象数组,它的工作原理正是我想要的。

SELECT ([{"id": 1},{"id": 2}] <> [{"id": 1}]) as result
FROM 'subscribed/topic'

结果:

{
   "result": true
}

我们将不胜感激。 谢谢!

【问题讨论】:

  • obj_idsdbWHERE 子句中不可访问。来自docs.aws.amazon.com/iot/latest/developerguide/…:“您不能在 SELECT 中引用使用 AS 关键字创建的任何别名。首先评估 WHERE 子句,以确定是否评估 SELECT。”
  • @BenT 是的,你是对的!用SELECT 替换了obj_idsdb,它起作用了。非常感谢!

标签: mysql arrays sql-server amazon-web-services aws-iot


【解决方案1】:

来自Ben T的积分

正如AWS Docs WHERE clause 所说:

“您不能在 SELECT 中引用使用 AS 关键字创建的任何别名。首先评估 WHERE 子句,以确定是否评估 SELECT。”

所以我需要做的就是将(SELECT id FROM get_dynamodb('table', 'key_name', 'key_value', 'rolearn').ids)(SELECT id from objects) 移至WHERE 子句。

最终查询:

SELECT ts, objects
FROM 'subscribed/topic'
WHERE objects <> []
AND (SELECT id from objects) <> (SELECT id FROM get_dynamodb('table', 'key_name', 'key_value', 'rolearn').ids)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多