2014-02-08 47 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“,我甚至都没有看到它。 –