gpt4 book ai didi

mysql - DBIx::Class 从一个表更新另一个表

转载 作者:行者123 更新时间:2023-11-29 06:55:16 25 4
gpt4 key购买 nike

我有一个直接在 MySQL 中运行良好的 SQL 查询,但我正在努力将其转换为通过 DBIx::Class 使用,我在此处简化了查询

UPDATE table1, table2
SET table1.field1 = SOMEFUNC( table1.field4 / table2.field2 )
WHERE table1.id = table2.id
AND table1.field3 = table2.field3
AND table2.field2 IS NOT NULL
AND table2.field2 > 0;

有什么建议吗?

最佳答案

在类似情况下,我通常会在相关表上执行搜索。在您的情况下,您有两个结果源:table1table2table1 与名为 table2 的表 table2 有关系(很可能)。因此,现在您使用此关系 table2table2 中执行搜索。

my $resultset = $schema->resultset('table1')->search_rs(
{
me.field3 => table2.field3,
table2.field2 => {'!=', '' },
table2.field2 > 0
},
{
'join' => 'table2',
'select' => ['me.field1', 'me.field4', 'table2.field2', 'me.field4' / 'table2.field2' ],
'as' => ['field1','field4', 'field2', 'division_result']
}
);

while ( my $this_res_row = $resultset->next ) {
## Presuming somefunc is a perl subroutine
$this_res_row->update( { field1 => somefunc( $this_res_row->get_column('division_result') ) } );
}

也许这就是您提出的解决方案,我认为不可能在单个 dbic update() 语句中执行您想要的操作。不幸的是,每个 update() 语句都会分别访问您的数据库。

顺便说一句,我不认为通过field3在同一个表上创建第二个并集是个好主意,你已经通过id完成了领域。为什么需要另一个?

或者,我认为这是一个更好的主意,即使用数据库触发器来实现您的代码。

请注意,我没有测试过代码,它可能包含一些错误,但你必须掌握如何获得你想要的东西的想法。

关于mysql - DBIx::Class 从一个表更新另一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13120018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com