Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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::Abstract-根据列操作匹配值_Sql_Perl - Fatal编程技术网

SQL::Abstract-根据列操作匹配值

SQL::Abstract-根据列操作匹配值,sql,perl,Sql,Perl,使用SQL::Abstract,我将如何构建此查询: SELECT * FROM mytable WHERE col1*col2 = 4; 在我的一生中,找不到任何关于如何使操作的左侧成为自定义的而不仅仅是一个列的示例 我能做的最好的事情就是让SQL::Abstract传递col1*col2,并在其周围加上引号,但这会破坏乘法 编辑:最好的解决方案是在左侧执行任何类型的操作,而不仅仅是乘法示例。例如,如果我想做一些稍微复杂一点的事情:(col1*col2)-col3.医生会让我认为你就是这样做

使用SQL::Abstract,我将如何构建此查询:

SELECT * FROM mytable WHERE col1*col2 = 4;
在我的一生中,找不到任何关于如何使操作的左侧成为自定义的而不仅仅是一个列的示例

我能做的最好的事情就是让SQL::Abstract传递col1*col2,并在其周围加上引号,但这会破坏乘法


编辑:最好的解决方案是在左侧执行任何类型的操作,而不仅仅是乘法示例。例如,如果我想做一些稍微复杂一点的事情:(col1*col2)-col3.

医生会让我认为你就是这样做的,但我没有尝试:

'col1' => { '*' => { -ident => 'col2' } }

但我不确定你如何将其与4进行比较。

这能满足你的需要吗

use v5.16;
use warnings;

use SQL::Abstract;

my $sqlab = SQL::Abstract->new;

my ($stmt, @bind) = $sqlab->select('mytable', '*', { '(col1*col2)-col3' => 4 });

use Data::Dump;
dd $stmt;
dd @bind;
输出

"SELECT * FROM mytable WHERE ( (col1*col2)-col3 = ? )"
4

不完全是。这将生成“select*FROMYTABLE where col1*col2”,查看生成查询的代码会很有帮助;我不记得我是怎么读的,我也懒得读那部分文档
my$qargs={where=>{col1=>'somevalue',col2=>'somevalue',},}
err,我指的是获取并打印生成的SQLOh的部分,对不起,那只是:
my($sql,@bind)=sql::Abstract->new('tablename',\@desiredcolumns,\%whereclause,\@sortorder)我在$qargs中构建所有这些参数。然后在$sql中获取sql字符串,在@bind中获取值。在我的代码中,列标识符中的垃圾代码不起作用,但显然这就是解决方案。所以我得四处寻找,看看我到底出了什么问题。