2014-02-08 6 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'안에'ORDER BY '를 넣으면 안된다는 점만 다릅니다.)'서브 쿼리. 가장 바깥 쪽에서 주문하십시오. –

+0

ORDER BY를 제거하면 이전과 같은 결과를 얻었습니다. 하위 쿼리에서 필요한 모든 subtemplateID 목록을 얻었습니다.이 하위 쿼리를 자체적으로 실행하고 목록이 제대로 작동하지만 하위 쿼리 내부에 넣으면 subemplateID가없는 행이 예상 한 목록과 일치합니다 그리고 모두 그들과 동일한 subtemplateID 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 서버 버전에 해당하는 설명서를 확인하십시오 '근처 어디에서 사용합니까? templates.id = bridge.templates and (templates.parent 'at line 5 " –

+0

"on "이라는 단어를 제거하십시오. 나는 거기도 보지 못했습니다. –

관련 문제