私の前には本当に面白い要件があります。私はカーソルの使用について考えましたが、私が望むものを手に入れることができるかどうかはわかりません。 FirstName、LastName、Email1、Email2、Email3、Email4のようなレコードごとに複数のメールを含むContactテーブルがあります。そのため、要件は、ファーストネームまたはラストネームのいずれかを含む電子メールを見つけ、その電子メールをプライマリ電子メールとして選択することです。それをSQLで書くためのエレガントな方法はありますか?姓または姓が一致する複数の電子メールからプライマリ電子メールを選択
ContactId FirstName LastName Email1 Email2 Email3
--------- --------- -------- --------- ------ ------
1 Jeremy Lin [email protected] [email protected] [email protected]
2 Sarah Woods [email protected] [email protected] [email protected]
3 Peter Wilkins [email protected] [email protected] null
期待される結果:
ContactId FirstName LastName Email
--------- --------- -------- ---------
1 Jeremy Lin [email protected]
2 Sarah Woods [email protected]
3 Peter Wilkins [email protected]
カーソルは単なるSQL文です。カーソルを使用するかどうかには違いはありません。 3つの電子メールしか持っていない場合は、「LIKE」を使って何が問題になっていますか?これを「エレガントな」ものにするために書くものは何も見つかりません:-) – Ben
CONTAINSを試しましたか? –
@Ben「CONTAINS」は、ある形式の索引(この場合はフルテキスト索引)を使用できるため、高速にすべきだと思います。もちろん、この形式の問合せは、列がフルテキスト索引にある場合にのみ使用できます。そうでない場合は、最初のフォームのみが使用可能です。しかし、 'LIKE'を使うと、ワイルドカードで始まるのでインデックスを使うことができないので、常にフルテーブルスキャンが必要です。 –