2016-01-27 172 views
3

假設我有一個客戶表和「more_information」表。查詢左條件加入條件

我查詢的客戶端列表和它們的附加信息(不是每個客戶有項目在這裏,所以我們使用LEFT JOIN):

SELECT id, name, more_information.data 
    FROM clients 
    LEFT JOIN more_information 
    ON more_information.client_id = clients.id 

現在我的問題: 我要查詢「more_information」只爲滿足條件的客戶,fe在過去30天報名,換了別人我只想爲null more_information.data

所以像(語法不正確)

SELECT id, name, more_information.data 
    FROM clients 
    CASE WHEN clients.registered > '2015-12-27 00:00:00' THEN 
     LEFT JOIN more_information 
     ON more_information.client_id = clients.id 
    ELSE 
     null 
    END 

我知道我可以在SELECT部分​​使用的情況下,但這不會改善我的目標。

原因是more_information JOIN查詢大量數據,並且有許多附加條件使查詢速度過慢。我不想在沒有必要的地方查詢它。這甚至可能與MySQL或我需要拆分查詢,並做出兩個單獨的查詢?

非常感謝您的想法

+0

支持嵌套查詢...因此,您可以將您的客戶端首先過濾到表別名中,然後將該表與「More_information」連接起來。同樣,您可以在客戶端加入之前將「more_information」過濾爲表別名。 – DiscipleMichael

回答

4

只需添加到您的JOIN條件

SELECT id, name, more_information.data 
FROM clients 
LEFT JOIN more_information 
ON more_information.client_id = clients.id AND clients.registered > '2015-12-27 00:00:00' 

INDEXregisteredidclient_id將有助於提高性能。