QA@IT

SQL 複数の条件を満たすWhere句の書き方について

6961 PV

Where句の記述がわからず行き詰まっています。

下記のようなテーブルを用意しました。

【取引案件table】
取引CD,案件Name
001,○○案件
002,▼▼案件
003,□□案件
004,××案件

【取引会社Table】
取引CD,取引会社Name,カテゴリCD
001,◆◆株式会社,A
002,◆◆株式会社,A
001,○○株式会社,B
004,▽▽株式会社,C

【カテゴリTable】
カテゴリCD,カテゴリ
A,卸
B,仲買
C,販売店

フォームには「取引案件table」の一覧を表示させ、取引CD・案件Nameに対して検索ができるようにしています。
別の検索条件として、JOINさせている取引会社Tableに対しての検索用ボックス「卸会社名」「仲買会社名」「販売店名」の3つを用意して、
「取引会社Table」の「取引会社Name」に対して上記3会社名を満たすレコードを抽出したいのですが、希望通りの結果を得られません。

抽出条件は「それぞれの検索ボックスがNULLの場合は全件抽出、そうでない場合はそれぞれの抽出結果を抽出」としたいので下記の通りWhere条件を記述しました。

@Tcd nvarchar(3), --「取引CD」の検索条件
@Tname nvarchar(50),--「取引会社Name」の検索条件
@oroshi nvarchar(50) , --「卸会社名」の検索条件
@nakagai nvarchar(50), --「仲買会社名」の検索条件
@hanbai nvarchar(50), --「販売店名」の検索条件

SELECT 取引案件table.取引CD
FROM 取引案件table LEFT OUTER JOIN
取引先Table ON 取引案件table.取引先CD=取引先table.取引先CD
WHERE
(@Tcd IS NULL OR 取引案件table.取引CD LIKE @Tcd ) AND
(@Tname IS NULL OR 取引案件table.案件Name LIKE '%' + @Tname + '%' ) AND
(@oroshi IS NULL OR 取引会社table.カテゴリCD = 'A' AND 取引会社table.取引会社Name LIKE '%' + @oroshi + '%' ) AND
(@nakagai IS NULL OR 取引会社table.カテゴリCD = 'B' AND 取引会社table.取引会社Name LIKE '%' + @nakagai + '%' ) AND
(@hanbai IS NULL OR 取引会社table.カテゴリCD = 'A' AND 取引会社table.取引会社Name LIKE '%' + @hanbai + '%' )

取引CD・案件Nameの抽出は問題ないのですが、取引先Tableに対しての抽出が上記だと3つの検索条件のうち1つだけ入力がある場合抽出されますが、
例えば「卸会社名=◆◆」「仲買会社名=○○」と2つ条件を入れると0件になってしまいます。

希望する結果は、抽出条件「卸会社名=◆◆」「仲買会社名=○○」「販売店名=NULL」とした時に、
「001」が抽出されるようにしたいのですがどう記述すればよいのか分かりません。

相関副問合せを使うのかとも考えたのですが、複数行あるWhere文をどう連結させてよいのかが分かりません。

お手数ですがご教授お願い致します。

回答

取引案件に対し取引会社を1つだけJOINしているのが
うまくいかない理由だと思います。

取引案件 as AK
   left join (取引会社 Where カテゴリ = 'A') as A
   left join (取引会社 Where カテゴリ = 'B') as B
   left join (取引会社 Where カテゴリ = 'C') as C
Where 
   A.Name Like '~'    <--- 卸の名前
   ・・・ 

というようなJoinを行う必要があります。SelectとかFromは省略してあるので
環境に合わせ適切に追加してください。

編集 履歴 (0)
  • Shu様

    ご回答ありがとうございます。
    おかげさまでうまく希望通りの結果を得る事ができました…!

    本当に助かりました、ありがとうございました。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。