2014-02-08 45 views
1

我對這個查詢有問題,子查詢本身完美工作,但是當我把它放在IN語句中時,結果是完全意外的,任何行包含來自子查詢的id。所以我的問題是,我做錯了什麼?謝謝你的幫助!IN語句中的子查詢不能正常工作

SELECT * 
FROM `wp_2_temp_elements` 
WHERE subtemplateID IN (
    SELECT bridge.sub_templates 
    FROM `wp_2_templates` AS templates 
    INNER JOIN `wp_2_b_templates_sub_templates` AS bridge ON templates.id = bridge.templates 
    WHERE templates.parent = 928 
    OR templates.id = 928 
    ORDER BY templates.id DESC 
) 
+0

你能解釋一下它是如何失敗的嗎?我不明白「任何行都包含來自子查詢的id」它應該完全按照書面的方式工作(如果子查詢自己工作),除了不應該在'IN( )'子查詢。在最外面的套餐上進行訂購。 –

+0

我刪除了ORDER BY,並得到了和以前一樣的結果。從子查詢中我得到了我需要的所有subtemplateID的列表,我自己運行這個子查詢,而我得到的列表工作得很好,但是當我把它放入子查詢中時,沒有與subtemplateID匹配的行匹配我期望的列表並且它們都具有相同的子模板ID id –

回答

0

我猜你並不是真的想在內部查詢中使用join。就在相關子查詢:

SELECT * 
FROM `wp_2_temp_elements` templates 
WHERE subtemplateID IN (
    SELECT bridge.sub_templates 
    FROM `wp_2_b_templates_sub_templates` AS bridge 
    WHERE templates.id = bridge.templates and 
      (templates.parent = 928 OR templates.id = 928) 
) 
ORDER BY templates.id DESC; 

order by也使得在子查詢沒有任何意義。

+0

我得到這個錯誤「#1064 - 你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在'ON WHERE templates.id'附近使用正確的語法= bridge.templates和(templates.parent'at line 5「 –

+0

刪除單詞」on「,我甚至都沒有看到它。 –