使用 SQL::Abstract,我将如何构建这个查询:
SELECT * FROM mytable WHERE col1*col2 = 4;
在我的一生中找不到任何关于如何使操作的左侧成为定制的东西而不仅仅是一个列的例子。
我能做的最好的事情是让 SQL::Abstract 传递 col1*col2 并在其周围加上引号,但这会破坏乘法。
编辑:最好的解决方案是在左侧进行任何类型的操作,而不仅仅是乘法示例。例如,如果我想做一些稍微复杂一点的事情:(col1*col2)-col3。
这能满足您的需要吗?
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
文档让我认为这就是你的做法,但我没有尝试过:
'col1' => { '*' => { -ident => 'col2' } }
但我不确定您如何将其与 4 进行比较。