【发布时间】: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_ids和db在WHERE子句中不可访问。来自docs.aws.amazon.com/iot/latest/developerguide/…:“您不能在 SELECT 中引用使用 AS 关键字创建的任何别名。首先评估 WHERE 子句,以确定是否评估 SELECT。” -
@BenT 是的,你是对的!用
SELECT替换了obj_ids和db,它起作用了。非常感谢!
标签: mysql arrays sql-server amazon-web-services aws-iot