2011-09-27 108 views
0

我想使用一個查詢的返回作爲另一個查詢的輸入。查詢輸出,是另一個查詢的輸入 - 不工作

當我單獨運行他們,他們工作得很好,但是當我在一個將它們組合起來,這是行不通的。

個人查詢是: -

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)%" 

請幫助。

回答

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

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='[email protected]' 
     order by ja.updated_at desc 
     limit 1) 

UPDATE

抱歉,顯然我誤解mellamokb的答案......的確是我的一樣......

+0

是的,你的解決方案也可以運行。非常感謝你們 – Amey