データスペシャリスト平成26年度午後1 問3〔設問2〕について
下記の条件で、【SQL2】と【SQL3】の実行結果が同じ(順番は異なってもよい。)になるようですが、
・【SQL3】で”UNION”ではなく、”UNION ALL”にする意味がわからない。ひとつの注文番号内に同じ商品番号が複数行あったとしても、"UNION"の方が同じ実行結果になりそう。
・【SQL3】でCAST関数を設定する意味がわからない。CAST関数でNULLを0に置換せずとも、NULLのままの方が【SQL2】と結果が一緒になりそう。
アドバイスいただけると幸いでございます。よろしくお願いします。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
【主なテーブル構造(一部省略)】
注文明細(注文番号, 注文明細番号, 商品番号, 販売単価, 注文数)
単品商品(商品番号, 商品名, 販売単価, 社内原価)
セット商品(商品番号, 商品名, 販売単価, 化粧箱番号)
セット商品構成(セット商品番号, 単品商品番号, 構成数)
※社内原価は単品商品のみに設定。セット商品にはNULLを設定。
※化粧箱番号はセット商品に使用される化粧箱を一意に識別する番号。セット商品のみに設定。単品商品にはNULLを設定。
【SQL2】
SELECT M.商品番号, T.社内原価, S.化粧箱番号
FROM 注文明細 M
LEFT INNER JOIN 単品商品 T ON M.商品番号 = T.商品番号
LEFT INNER JOIN セット商品 S ON M.商品番号 = S.商品番号
WHERE M.注文番号
【SQL3】
SELECT M.商品番号, T.社内原価, CAST(NULL AS INT) 化粧箱番号
FROM 注文明細 M INNER JOIN 単品商品 T
ON M.商品番号 = T.商品番号 WHERE M.注文番号 = :hv
UNION ALL
SELECT M.商品番号, CAST(NULL AS INT) 社内原価, S.化粧箱番号
FROM 注文明細 M INNER JOIN セット商品 T
ON M.商品番号 = S.商品番号 WHERE M.注文番号 = :hv
※hvはホスト変数を表す。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/09/27 00:12