2012-02-21 4 views
0

다음 SQL을 가지고 있고 항목이 중첩 된 sql에 없으면 order_item_wo_id 열이 null을 반환하고 열의 값을 반환하면 oi.cop_workorder_id을 반환합니다.중첩 된 SQL에서 반환 값

어떻게하면됩니까? 그것은 oi.cop_workorder_id처럼 보이는

SELECT 
    cop.wo_id, 
    CASE 
    WHEN EXISTS (SELECT oi.cop_workorder_id 
      FROM oseo_orderitem oi 
      WHERE oi.cop_workorder_id = cop.wo_id) THEN 
      oi.cop_workorder_id 
    ELSE null 
    END AS order_item_wo_id 
FROM oseo_cop_wo cop 
where cop.wo_id = '123'; 

는 중첩 된 SQL의 외부에서 인식되지 않습니다.

ERROR: missing FROM-clause entry for table "oi"

답변

4

내가 뭔가를 놓치지 않는다면, 당신은 이것을 지나치게 복잡하게 만든 것처럼 보입니다. 그냥 LEFT를 사용 은 가입 :

SELECT 
    cop.wo_id, 
    oi.cop_workorder_id AS order_item_wo_id 
FROM oseo_cop_wo AS cop 
    LEFT JOIN oseo_orderitem AS oi 
     ON oi.cop_workorder_id = cop.wo_id 
WHERE cop.wo_id = '123'; 
+0

dohh! 나는 항상 복잡해지기 쉽다. 물건을 간단하게 유지하는 것은 창의력을 필요로합니다. – capdragon

1

사용하면 COALESCE 기능을 사용할 수 있습니다. Oracle의 NVL 기능과 유사하게 작동합니다. 그러나 PostgreSQL을 작성하고 테스트 할 수있는 권한이 없습니다.

+0

죄송합니다, 문서에서, 나는이를 사용할 수있는 방법을 볼 수 없습니다. – capdragon

+0

아, 아시다시피, 저는 당신의 설명에 약간의 잘못 지시를 받았습니다. Justin이 올바른 해결책을 제공 한 것처럼 보입니다. – northpole

+0

예, 고마워요! (+1) 노력에 대한 – capdragon