2011-12-03 10 views
3

私はクライアントデータに基づいていくつかのビューからデータをコンパイルするように設計しました。MySQLは複数のビューで結合を残しました

SELECT 
    vw_clients.client_id, 
    name, 
    exts, 
    vms, 
    ivrs, 
    queues, 
    conf10, 
    conf20, 
    conf30 
FROM 
    vw_clients, 
    vw_exts, 
    vw_vms, 
    vw_ivrs, 
    vw_queues, 
    vw_conf10, 
    vw_conf20, 
    vw_conf30 
WHERE 
    vw_clients.client_id = vw_exts.client_id AND 
    vw_clients.client_id = vw_vms.client_id AND 
    vw_clients.client_id = vw_ivrs.client_id AND 
    vw_clients.client_id = vw_queues.client_id AND 
    vw_clients.client_id = vw_conf10.client_id AND 
    vw_clients.client_id = vw_conf20.client_id AND 
    vw_clients.client_id = vw_conf30.client_id; 

vw_clientsのレコードに関するすべてのビューにレコードがある限り、クエリは正常に動作します。しかし、これを変更して左結合を使用する必要があります。これにより、vm_clientsのすべてのレコードと、それらのクライアントのレコードを持つ他のビューのレコードのみが返されます。

私は左ジョインについては読んだことがありますが、たいていは1つまたは2つのテーブルに参加することに関する情報しか見つかりませんでしたが、私は8に参加する必要があります。vw_clients.client_idを対応するclient_idフィールドすべてのビューで?その構文は何ですか?

ご協力いただきありがとうございます。私はこの問題を解決することにとても近く、これはパズルの最後の部分だと思います!

多くのありがとうございます。

+0

暗黙的な結合を使用しています。代わりに明示的な結合を使用することができます(つまり、「... left join on ...」)。 –

答えて

4

左結合は、fromリストの最初にvw_clientsを入れてから、左結合後に他のすべてのテーブルを続けることができます。左側の結合は、2つの表または1つの「結果セット」と1つの表のみを結合することができます。結果セットは前の結合の結果です。あなたのケースでは

SELECT 
    T0.client_id, name, exts, vms, ivrs, queues, conf10, conf20, conf30 
FROM 
    vw_clients T0 
    left join vw_exts T1 on T0.client_Id=T1.client_id 
    Left join vw_vms T2 on ... 
    ... 
Where ... 

たぶんここにあなたがwhere句は必要ありません。

+0

それで簡単!ありがとう、最後の情報で私は自分のクエリを動作させることができました。私はWHERE句をすべて削除して、それを扱います。 – btongeorge

0

はい、WHERELEFT JOINに置き換えてください。

これらの余分なテーブルをFROM部分から削除することができます。

関連する問題