查询时使用LEFT JOIN条件

3

假设我有一个客户表和一个“更多信息”表。

我查询客户列表及其附加信息(并非每个客户都在此处输入,因此我们使用LEFT JOIN):

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

现在我的问题是:我只想查询满足某些条件(例如在过去的30天内注册)的客户的“more_information”信息,对于其他客户,只需返回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部分使用CASE,但这不会改善我的目标——性能。
原因是more_information JOIN查询了大量数据,并且有许多附加条件,使查询变得太慢。我不想在不必要的地方进行查询。MySQL是否支持这种操作,还是需要拆分查询并进行两个单独的查询?
非常感谢您的建议。

嵌套查询是被支持的...所以,你可以先将你的客户筛选到一个表别名中,然后再将该表与“更多信息”进行左连接。同样地,你也可以在客户左连接之前将你的“更多信息”筛选到一个表别名中。 - DiscipleMichael
1个回答

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'

registeredidclient_id 上创建一个 INDEX 可以提高性能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接