2017-09-02 8 views
0

私は3つのテーブル:orders、purchase_order、sale_orderを持っています。テーブルオーダーには、外部キーorder_idとorder_numbの2つの列があります。 Order_idはpurchase_orderまたはsale_orderのIDです。order_numbは注文の順序を示すためのものです。 = 1別のSELECTの結果に基づいて何かを選択するクエリを作成するにはどうすればよいですか?

order_numbそれはPURCHASE_ORDER order_numb = 2、それは

sale_orderですだから私はテーブルの受注から選択させる必要があり、すべての行のチェックのために、それはorder_numb = 1またはorder_numb = 2を持っている場合、およびに基づいその結果は、そのidに基づいてpurchase_orderまたはsale_orderから選択します。

私はそれを2つのクエリで動作させることができましたが、私はそれを1つにしたいと思います。あなたは、あなたのタスクを達成するために、UNIONを使用できる2つのテーブルから同じ列を選択していると仮定すると、

ORDER 

| order_id | action_numb | 
-------------------------- 
| 51 |  1  | 
-------------------------- 
| 40 |  2  | 
-------------------------- 
| 41 |  2  | 
-------------------------- 
| 52 |  1  | 


PURCHASE_ORDER  

| id | other_columns | 
---------------------- 
| 51 | something | 
---------------------- 
| 52 | something | 


SALE_ORDER  

| id | other_columns | 
---------------------- 
| 40 | something | 
---------------------- 
| 41 | something | 
---------------------- 

答えて

1

SELECT o.id,<other-columns> 
    FROM order o INNER JOIN purchase_order po 
    ON o.id = po.id 
    WHERE o.action_numb = 1 

    UNION 

    SELECT o.id,<other-columns> 
    FROM order o INNER JOIN sale_order so 
    ON o.id = so.id 
    WHERE o.action_numb = 2 
1
SELECT o.* 
    , CASE 
     WHEN so.id is null THEN po.other_columns 
     WHEN po.id is null THEN so.other_columns 
     END other_columns 
    FROM orders o 
    LEFT JOIN purchase_order po 
     ON po.id = o.order_id 
     AND o.order_numb = 1 
    LEFT JOIN sale_order so 
     ON so.id = o.order_id 
     AND o.order_numb = 2 
+0

私はこの結果を得ることはありません – bobby

+0

あなたは正しいです。 LEFT JOINを忘れました。ただ更新されました。 – Sal

関連する問題