Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用AREL命名计算布尔列?_Sql_Ruby On Rails_Arel - Fatal编程技术网

Sql 如何使用AREL命名计算布尔列?

Sql 如何使用AREL命名计算布尔列?,sql,ruby-on-rails,arel,Sql,Ruby On Rails,Arel,我有一个SQL查询,我正试图转换为AREL。它开始于: SELECT COUNT(id) > 0 AS exists... 到目前为止,我已经: Arel::Table.new(:products)[:id].count.gt(0).as(:exists) 但我得到: NoMethodError - undefined method `as' for #<Arel::Nodes::GreaterThan:0x007fc98c4c58d0> 有什么想法吗?这应该可以,给你0

我有一个SQL查询,我正试图转换为AREL。它开始于:

SELECT COUNT(id) > 0 AS exists...
到目前为止,我已经:

Arel::Table.new(:products)[:id].count.gt(0).as(:exists)
但我得到:

NoMethodError - undefined method `as' for #<Arel::Nodes::GreaterThan:0x007fc98c4c58d0>

有什么想法吗?

这应该可以,给你0或1

测试:


这应该可以,给你0或1

测试:


我不确定这是否可行:gt、eq等是查询的WHERE部分使用的表达式。这里您要做的是在SELECT的字段列表中进行操作,SELECT由Arel的project方法处理。这是有效的:

Arel::Table.new(:products).project(product[:id].count.as(:exists))
但是,如果您添加条件gt0,它将不起作用

这并不新奇,但它满足了您的需要:

Arel::Table.new(:products).project(Arel.sql('COUNT(id) > 0').as('exists'))

我不确定这是否可行:gt、eq等是查询的WHERE部分使用的表达式。这里您要做的是在SELECT的字段列表中进行操作,SELECT由Arel的project方法处理。这是有效的:

Arel::Table.new(:products).project(product[:id].count.as(:exists))
但是,如果您添加条件gt0,它将不起作用

这并不新奇,但它满足了您的需要:

Arel::Table.new(:products).project(Arel.sql('COUNT(id) > 0').as('exists'))
注:这其中很多都是猜测,因为Arel在所有实际用途中完全没有文档记录!也许有更好或更快的方法可以做到这一点,但从表面上看,下面的内容应该是正确的

请记住,Arel的这些部分只生成需要传递给SelectManager或其他可以处理它们的实体的AST节点

要生成语法元素,可以执行以下操作:

node=Arel::Nodes::As.new Arel::Table.new:products[:id].count.gt0, “存在” 它将生成SQL片段计数“products”。“id`>0作为“exists”,您可以将其传递到SelectManager的项目中。你可以做一些小把戏,比如:

产品 .where无获取关系的快捷方式 .点击do | rel| 节点=从上方 进入SelectManager并*添加*投影。 如果要*替换*整个投影,请首先执行以下操作: 相关预测=[] rel.arel.projectnode 终止 至于根据数据库后端将谓词的结果实际映射回正确的Ruby布尔值,我留给读者作为练习,也就是说,这就是我来这里寻找正确方法的原因。

注意:这很多都是猜测,因为Arel在所有实际用途中完全没有文档记录!也许有更好或更快的方法可以做到这一点,但从表面上看,下面的内容应该是正确的

请记住,Arel的这些部分只生成需要传递给SelectManager或其他可以处理它们的实体的AST节点

要生成语法元素,可以执行以下操作:

node=Arel::Nodes::As.new Arel::Table.new:products[:id].count.gt0, “存在” 它将生成SQL片段计数“products”。“id`>0作为“exists”,您可以将其传递到SelectManager的项目中。你可以做一些小把戏,比如:

产品 .where无获取关系的快捷方式 .点击do | rel| 节点=从上方 进入SelectManager并*添加*投影。 如果要*替换*整个投影,请首先执行以下操作: 相关预测=[] rel.arel.projectnode 终止 至于根据数据库后端将谓词的结果实际映射回正确的Ruby布尔值,我将此作为读者的练习,也就是说,我就是这样来到这里寻找正确的方法的