- ベストアンサー
SQLの困りごと
- SQLの作成に困っており、資料の送付対象店舗を一覧表示したいです。
- 資料が送付されたが、実際には送付すべきではなかったデータも一緒に表示したいです。
- UNIONを使用せずに正しい結果を出力する方法を教えていただきたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
テーブルのキー情報や具体的なデータが不明なので的外れかもしれませんが、 店舗への送付情報と資料送付済みをfull joinしたものをお客さん情報と結合すればいいのではないでしょうか。 SELECT , お客さん情報.年度 , お客さん情報.顧客CD , お客さん情報.顧客名 , 送付_送付済情報.送付店舗CD , 送付_送付済情報.送付済み店舗CD , 送付ステータス = case when 送付_送付済情報.送付店舗CD = NULL and 送付_送付済情報.送付済み店舗CD != NULL then '送付間違い' else '' end FROM (select * from お客さん情報 where 年度 = @年度 ) お客さん情報 --1 メインテーブル left join ( select 店舗への送付情報.顧客CD 送付顧客CD , 店舗への送付情報.店舗CD 送付店舗CD , 資料送付済み.顧客CD 送付済み顧客CD , 資料送付済み.店舗CD 送付済み店舗CD from (select * from 店舗への送付情報 where 年度 = @年度) 店舗への送付情報 --2 資料の送付対象店舗情報を保持 full join ( select * from 資料送付済み where 年度 = @年度) 資料送付済み --3 資料の送付済み情報を保持 on 店舗への送付情報.顧客CD = 資料送付済み.顧客CD and 店舗への送付情報.店舗CD = 資料送付済み.店舗CD) 送付_送付済情報 on (お客さん情報.顧客CD = 送付_送付済情報.送付顧客CD or お客さん情報.顧客CD = 送付_送付済情報.送付済み顧客CD) ; 店舗名はどちらの店舗CDから取得すればいいのか不明なので省略しました。 SQLServerの環境がないので動作確認はしていません。 #SQLServerの場合はNULLとの比較は "=" や "!=" でも出来るのですよね?