2017-12-21 10 views
1

を選択:動的な列私は3つのテーブル持っ

T_ORDER_PLACEMENTS (ORDER_ID, CUSTOMER_ID, ORDER_DATE) 
T_ORDER_DETAILS (ORDER_ID, STOCK_ID) 
T_STOCK_DETAILS(STOCK_ID, STOCK_NAME, STOCK_PRICE) 

を誰かが次の出力を生成し、クエリを記述するために私を助けてください:

STOCK_ID, STOCK_NAME, STOCK_PRICE, ORDERED_STATUS 
1   stock1  5000   ordered 
2   stock2  10000  unordered 

「を注文したとORDERED_STATUS列を移入ストックが順序付けられていれば、 '順序付けられていない'ことに注意してください。

答えて

1
SELECT 
    t_stock_details.*, 
    CASE WHEN order_check.stock_id IS NULL THEN 'unordered' ELSE 'ordered' END AS ordered_status 
FROM 
    t_stock_details 
LEFT JOIN 
(
    SELECT stock_id FROM t_order_details GROUP BY stock_id 
) 
    order_check 
     ON order_check.stock_id = t_stock_details.stock_id 

サブクエリは、どのサブセットに関連付けられている注文があるかを確認します。多くの注文が見つかった場合でも、stock_idに1行だけが返されるように、GROUP BYを使用します。

LEFT JOINは、何かに正常に結合されているかどうかにかかわらず、すべての行がt_stock_detailsに確実に返されます。参加が成功した場合、注文があったことがわかります。また、最大での1つの行にのみ結合されます(前述のGROUP BYのおかげで、重複は発生しません)

order_check.stock_idに失敗した参加者はNULLとなるため、返信する文字列を確認するためにCASEステートメントを使用します。

+0

ありがとう@MatBailie。ソリューションは働いた:) – Prashanth

関連する問題