2

SQLでクエリを書く方法がわかりません。
これは私がこれまでに試したことです。

where
  case 
       when a.book_id like 'AB%' then a.book_id = b.school_id,   --1   
       when a.book_id like 'CB%' then a.book_id = b.college_id.  --2
  end


ケース1と2の説明。

1-私は良いと信じています。
2-a.book文字CBで始まる場合、たとえば=CBQ123を取ります。b.college_idの前にCBがありません。Q123b.college_id

編集して例を追加

select 
       a.Name,
       a.ID,
       a.Due,
       b.school_id,
       b.college_id
from Student a and FinishedStudent b
where
  case 
       when a.book_id like 'AB%' then a.book_id = b.school_id,   --1   
       when a.book_id like 'CB%' then a.book_id = b.college_id.  --2
  end

a.book = CBQ111の場合、Q111はCBQ11ではなくFinishedStudentテーブルにあるため、最後の3文字を比較する必要があります。

ケース2の例で編集

   when a.book_id ='CBQ111' then a.book_id(Q111) = b.college_id.  --2
4

2 に答える 2

6

ちょっとした構文の問題。T-SQLでは、CASEは値を返す式であるため、出力を何かと比較する必要があります。これは、VBなどの他の言語のようなフロー制御ステートメントではありません。

where a.book_id = case 
       when a.book_id like 'AB%' then b.school_id    --1   
       when a.book_id like 'CB%' then b.college_id   --2
  end

コメントに追加された文章題のスクランブリングに基づいて、おそらくあなたが実際に求めているのはこれです:

WHERE (a.book_id LIKE 'AB%' AND a.book_id = b.school_id)
   OR (a.book_id LIKE 'CB%' AND SUBSTRING(a.book_id, 3, 255) = b.college_id)

その最後の行を書く方法は他にもありますが、book_idにインデックスがある場合でも、LIKEフィルターはおそらく役に立ちます。

于 2012-09-13T18:53:40.500 に答える
0

編集:問題を修正し、コードをクリーンアップします。

WHERE句に入れることもできますが、私はそれを結合に入れることを好みます。

select 
       a.Name,
       a.ID,
       a.Due,
       b.school_id,
       b.college_id
from Student a
  join FinishedStudent b on a.book_id = 
    case 
       when a.book_id like 'AB%' then b.school_id,   --1   
       when a.book_id like 'CB%' then b.college_id.  --2
    end
于 2012-09-13T18:54:18.520 に答える