クライアントテーブルには、このように動作する特殊な行がいくつかあります。同じ顧客に属しているがわずかに異なる列の値を持つ複数の顧客レコードがあります。テーブルはそれらに属し、私はテーブルの中で何も変えることができないので、これに対処するためにスクリプトを作成しなければなりません。最初の一致に行がない場合の条件付き結合、2番目の一致を使用する
今私はメインテーブルの顧客データを比較し、クライアントテーブルからデータを取得する必要があります。条件は以下の通りです:
メインテーブルIdは、クライアントテーブルに存在する場合は、メインテーブルIDがクライアントテーブルに存在しない場合は、メインテーブルId列
でレコードのみマッチングを取得し、使用メインテーブルIdnumberを使用して、クライアントテーブルのIdnumberを検索して一致させます。以下は
私が達成しようとしているものの例である:
はのは、このデータは、メインテーブルと下のクライアントテーブルに存在するとしましょう:シナリオで
を私のスクリプトは、常にクライアントテーブルPKId 1を選択し、メインテーブルId列とクライアントテーブルClientId列を照合することによって、クライアントテーブルの行PKId 2を無視する必要があります。
そして、下記の別のシナリオについて:
行は1が空ClientIdのを持っており、クライアントテーブルにクライアントID 10を一致させる方法はありません、私のスクリプトを検索するためには、メインテーブルIdnumberを使用する必要がありますPKIDので、クライアントテーブルのレコードを一致させ、Idnumber列でPKId 2行を取得します。
私は結合条件で大文字と小文字を区別したいと思っていましたが、どうすれば構いませんか。私は以下のようなもの(実際のないSQL文の、ちょうどいくつかのアイデア)を考えている:これを達成するために、任意の代替に私にアドバイスできるかどう
Select
c.Id, c.Name, c.AuthorizeToken
From
Client c
Left Join
Main m on (If m.Id = c.ClientId has data return, get AuthorizeToken from that row only;
else if m.Id = c.ClientId has no data return, use m.Idnumber = c.Idnumber
to find and get AuthorizeToken)
は感謝しています。
をJOINを使用することができますが、 'PKId'または' ClientId'が必要なのでしょうか? 'Id'は存在しません。 'm.Name'は重要ですか? – Andrew