2011-12-03 62 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的所有記錄,並且只返回其他視圖中具有這些客戶端記錄的記錄。

我讀過關於左連接的信息,但最多隻能找到加入一個或兩個表的信息 - 但我需要加入8.我是否將vw_clients.client_id的左連接添加到相應的client_id字段在所有的意見?這是什麼語法?

將不勝感激的任何幫助。我非常接近解決這個問題,我認爲這是難題的最後一塊!

非常感謝。

+0

您正在使用隱式連接 - 您可能希望切換到使用顯式連接(即...... ...在...上加入 ...)。 –

回答

4

您可以通過將vw_clients放在from列表的第一個中,然後在左連接後跟隨其他所有表來使用左連接。左連接只能連接兩個表或一個「結果集」和一個表,其中結果集是前一個連接的結果。

你的情況:

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

是的,你只需將WHERE替換爲LEFT JOIN即可。

LEFT JOIN vw_exts ON vw_clients.client_id = vw_exts.client_id 

然後,您可以從FROM部件中刪除這些額外的表格。