Couchbase 查询名称别名
Couchbase Query Name Alias
实际上我正在使用 Couchbase N1Ql 查询从数据库中检索数据,其中包含计算
下面是我查询的类似模型示例:
SELECT 2+1 AS Greeting from something where Greeting>1;
我得到的错误是:
Ambiguous reference to field Greeting.
但是如果我这样修改:
SELECT 2+1 AS Greeting from something where 2+1>1
这是可行的,但这不是好的解决方案,因为它涉及大量计算。
谁能帮我优化这个查询?
正如@DinishDB 提到的,投影别名不能在 WHERE 中使用。
SELECT Greeting
FROM something
LET Greeting = 2+1
WHERE Greeting > 1
LET 变量可以从文档派生,可以链接。
如果让变量在 WHERE 中使用,它将内联并选择索引选择。也在 WHERE FILTER 之前评估的变量。如果未在 WHERE 中使用,它会评估 post FILTER 以保存评估。在上述情况下,它是常数。碰巧 FILTER 的计算结果为假,将不会获取任何文档。
或
WITH Greeting AS (2+1)
SELECT Greeting
FROM something
WHERE Greeting > 1
If constant use WITH clause once evaluation vs LET every document evaluation.
实际上我正在使用 Couchbase N1Ql 查询从数据库中检索数据,其中包含计算
下面是我查询的类似模型示例:
SELECT 2+1 AS Greeting from something where Greeting>1;
我得到的错误是:
Ambiguous reference to field Greeting.
但是如果我这样修改:
SELECT 2+1 AS Greeting from something where 2+1>1
这是可行的,但这不是好的解决方案,因为它涉及大量计算。 谁能帮我优化这个查询?
正如@DinishDB 提到的,投影别名不能在 WHERE 中使用。
SELECT Greeting
FROM something
LET Greeting = 2+1
WHERE Greeting > 1
LET 变量可以从文档派生,可以链接。 如果让变量在 WHERE 中使用,它将内联并选择索引选择。也在 WHERE FILTER 之前评估的变量。如果未在 WHERE 中使用,它会评估 post FILTER 以保存评估。在上述情况下,它是常数。碰巧 FILTER 的计算结果为假,将不会获取任何文档。
或
WITH Greeting AS (2+1)
SELECT Greeting
FROM something
WHERE Greeting > 1
If constant use WITH clause once evaluation vs LET every document evaluation.