2012-02-21 7 views
0

次のSQLがあり、アイテムがネストされたsqlに存在しない場合はorder_item_wo_idカラムがnullを返し、カラムoi.cop_workorder_idの値を返すようにします。ネストされたSQLからの戻り値

私はこれをどのように達成できますか?

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'; 

oi.cop_workorder_idは、ネストされたSQLの外で認識されないように見えます。

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

答えて

4

私が何かを紛失していない限り、あなたはこれを過度に複雑にしているようです。ただ、LEFTを使用 は、JOIN:

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

関連する問題