查询输出,是另一个查询的输入 - 不工作

问题描述:

我想使用一个查询的返回作为另一个查询的输入。查询输出,是另一个查询的输入 - 不工作

当我单独运行他们,他们工作得很好,但是当我在一个将它们组合起来,这是行不通的。

个人查询是: -

select ja.id 
from job_applications ja 
join users u 
on u.id = ja.user_id 
where u.email='[email protected]' 
order by ja.updated_at desc 
limit 1 

输出是

308480 

,当我使用这个值作为输入另一个查询得到我想要的结果

select * from delayed_jobs dj 
where handler like "%308480%" 

但是,现在当我试图运行它作为一个单一的查询它不起作用(我得不到输出)

select * from delayed_jobs dj 
where handler like 
"%(select ja.id 
    from job_applications ja 
    join users u 
    on u.id = ja.user_id 
    where u.email='[email protected]' 
    order by ja.updated_at desc 
    limit 1)%" 

请帮助。

你不能像这样的语句里面执行SQL代码。你需要通过连接在一起的结果是这样产生类似表达:

where handler like 
    concat('%', (select ja.id 
     from job_applications ja 
     join users u 
     on u.id = ja.user_id 
     where u.email='[email protected]' 
     order by ja.updated_at desc 
     limit 1), 
    '%') 
+0

您的SQL语法错误;检查对应于你的MySQL服务器版本使用附近“其中处理器一样 CONCAT(”%正确的语法手册第1行 – Amey

+0

对不起“(选择ja.id从job_applications ”我的坏它的作品!伟大谢谢 – Amey

+0

将此标记为答案,一旦5分钟计数器(由stackoverflow设置)通过 – Amey

对于动态SQL,你应该使用存储过程,就像在mellamokb他的回答解释。但是,您的查询不是真正动态的,因此您可以使用子查询。例如:

select * from delayed_jobs dj 
where handler like 
    (select concat('%', ja.id, '%') 
     from job_applications ja 
     join users u 
     on u.id = ja.user_id 
     where u.email='[email protected]' 
     order by ja.updated_at desc 
     limit 1) 

UPDATE

抱歉,显然我误解mellamokb的答案......的确是我的一样......

+0

是的,你的解决方案也可以运行。非常感谢你们 – Amey