0

SQL::Abstract::Moreを使用して結合を実行しようとしています。これには、テーブルの列ではなく、`and とその後のリテラル値があります。

=>{table.table_id=table_id,table_log.date>table.date,table_log.event_id=1}
            gd_audit_log

私が望む結果の出力

LEFT OUTER JOIN table_log ON ( 
    table_log.date > table.date
    AND table.table_id = table_log.table_id
    AND table_log.event_id = 1
)

このコードは次を除いて機能します

AND table_log.event_id = 1

エラーは

... failed: Unknown column 'table_log.1' in 'on clause' 

明らかに間違った SQL を生成しています。私が理解しようとしているのは、必要な SQL を生成する方法です。

4

3 に答える 3

2

RT バグ 84972から。リテラル値を挿入するには、文字列構文ではなく hashref 構文を使用する必要があります。

my $result = $sqla->join(
 'table',
 { operator => '=>',
   condition => { '%1$s.table_id' => {-ident => '%2$s.table_id'},
                  '%2$s.date'     => {'>' => {-ident => '%1$s.date'}},
                  '%2$s.event_id' => 1}},
 'table_log'
);
于 2013-05-01T17:12:12.427 に答える
0

フォースルークを使う

qw/table
=>{table.table_id=table_id,table_log.date>table.date,table_log.event_id='1'}
table_log/

一重引用符で「エスケープ」1が必要

于 2015-11-16T17:59:05.793 に答える
0

それtable_log.event_id = 1は有効なjoin条項ではないように思えますが、where条項に含める必要があります。

于 2013-04-30T22:02:42.080 に答える