0

私はいくつかのデータベーステーブルを持っています:

  • Client(基本情報、名、姓など)
  • Employer(基本情報、勤務先名、FAX、住所等)

次に、必要に応じて 2 つのテーブルをリンクするジャンクション テーブルを作成します。

  • Client_Employer(ClientID、EmployerID)

これらの表はすべて、確認済みの正確でクリーンなデータで維持されています。

情報提供のみを目的として使用される 4 番目のテーブルがあり、データはエンド ユーザーによって提供され、確認できないため、クリーンでも信頼性もありません。

  • ClientEmployer(現在の雇用主に関してクライアントから提供されたデータ)

テーブルにレコードが存在する場合はクライアント/雇用主データを返すクエリを作成したいと考えていますが、他にレコードが存在しない場合は雇用主情報Client_Employerのテーブルにフォールバックします。ClientEmployer

の列は、 の列Employerとまったく同じClientEmployerです。

ISNULL()CASE、などを使用していくつかのオプションを見てきましたIF/ELSEが、他の人がこれを行うための最良で最もクリーンな方法は何だと思うか知りたいですか?

4

3 に答える 3

1

ClientEmployer テーブルのスキーマについていくつかの仮定を立てると、次のように UNION と EXISTS を組み合わせることができます。

SELECT 
    cl.ClientID as ClientID, 
    em.EmployerID as employerID,
    cl.firstname, 
    cl.lastname, 
    em.employername, 
    em.fax, 
    em. address 
FROM 
    Client cl, 
    Employer em, 
    Client_Employer ce 
WHERE 
    cl.ClientID = ce.ClientID 
    and em.EmployerID = ce.EmployerID
UNION
SELECT 
    Clem.ClientID as clientID,
    -1 as EmployerID,
    clem.firstname, clem.lastname, 
    clem.employername, 
    clem.fax,
    clem.address 
FROM 
    ClientEmployer clem 

WHERE 
    NOT EXISTS (
                  SELECT * FROM Client cl, Employer em, Client_Employer ce 
                  WHERE cl.ClientID = ce.ClientID 
                        and em.EmployerID = ce.EmployerID 
                        and clem.ClientID = cl.ClientID
                        and clem.EmployerName = ce.EmployerName)
于 2013-03-26T17:37:28.997 に答える
0

ISNULL()次のように を使用する必要があると思いますLEFT JOIN Employer

SELECT 
  Client.*, 
  Employer.* 
FROM Client 
LEFT JOIN Client_Employer 
 ON Client_Employer.client_id = Client.id 
LEFT JOIN ClientEmployer 
 ON ClientEmployer.client_id = Client.id 
LEFT JOIN Employer 
 ON Employer.id = ISNULL(Client_Employer.employer_id, ClientEmployer.employer_id) 
WHERE Employer.id IS NOT NULL;

一部Employer.idNULL(WHERE句)の場合Client.id、両方のクライアント/雇用者テーブルに特定の関係がありません。つまり、一部のクライアント/雇用者テーブルにあるデータだけが得られます。

期待どおりに動作することを願っています。

于 2013-03-26T17:21:57.860 に答える
0

IF EXISTS の使い方はどうですか?データが存在する場合は非常に簡単にデータを取得できるようです。それ以外の場合は、存在しない例で ClientEmployer から選択します。

于 2013-03-26T17:22:13.723 に答える