我想使用一个查询的返回作为另一个查询的输入。
当我单独运行它们时,它们可以正常工作,但是当我将它们组合在一起时,它不起作用。
个别查询是: -
select ja.id
from job_applications ja
join users u
on u.id = ja.user_id
where u.email='xxxxx@gmail.com'
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='xxxxx@gmail.com'
order by ja.updated_at desc
limit 1)%"
请帮忙。
答案 0 :(得分: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='xxxxx@gmail.com'
order by ja.updated_at desc
limit 1),
'%')
答案 1 :(得分:0)
对于动态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='xxxxx@gmail.com'
order by ja.updated_at desc
limit 1)
<强>更新强>
抱歉,显然我误解了mellamokb的答案......确实和我的一样......