在条件下查询LEFT JOIN

时间:2016-01-27 13:59:19

标签: mysql sql left-join

我们说我有一张客户表和一张表" 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"仅适用于满足条件的客户,例如在过去的30天内注册了,对于其他我想要的更多为null_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部分​​使用CASE,但这不会提高性能,这是我的目标。

原因是more_information JOIN查询了大量数据,并且有许多其他条件会导致查询太慢。我不想在没有必要的地方查询它。甚至可以使用MySQL,还是我需要拆分查询并进行两次单独的查询?

非常感谢你的想法

1 个答案:

答案 0 :(得分:4)

只需添加到您的加入条件

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'

INDEXregisteredid上的client_id有助于提升效果。