首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >join with AND id=1 with SQL::Abstract::More

join with AND id=1 with SQL::Abstract::More
EN

Stack Overflow用户
提问于 2013-05-01 03:07:11
回答 3查看 417关注 0票数 0

我正在尝试使用SQL::Abstract::More进行连接,它有一个`and,然后是一个文字值,而不是在表列上。

代码语言:javascript
复制
=>{table.table_id=table_id,table_log.date>table.date,table_log.event_id=1}
            gd_audit_log

我想要的结果输出

代码语言:javascript
复制
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
)

此代码可以正常工作,但以下情况除外

代码语言:javascript
复制
AND table_log.event_id = 1

错误是

代码语言:javascript
复制
... failed: Unknown column 'table_log.1' in 'on clause' 

很明显,它生成了错误的SQL,我试图弄清楚的是如何让它生成我需要的SQL。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-02 01:12:12

来自RT Bug 84972。要插入文字值,需要使用hashref语法,而不是字符串语法:

代码语言:javascript
复制
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'
);
票数 2
EN

Stack Overflow用户

发布于 2013-05-01 06:02:42

在我看来,table_log.event_id = 1不是一个有效的join子句,但应该在where子句中。

票数 0
EN

Stack Overflow用户

发布于 2015-11-17 01:59:06

使用强制Luke

代码语言:javascript
复制
qw/table
=>{table.table_id=table_id,table_log.date>table.date,table_log.event_id='1'}
table_log/

需要用单引号“转义”%1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16307208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档