【问题标题】:Query LEFT JOIN on condition查询 LEFT JOIN 条件
【发布时间】:2016-01-27 13:59:19
【问题描述】:

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

我查询了客户列表和他们的附加信息(不是每个客户这里都有条目,所以我们使用 LEFT JOIN):

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

现在我的问题: 我只想为满足条件的客户查询“更多信息”,例如在过去 30 天内注册,对于其他人,我希望 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,还是我需要拆分查询并进行两个单独的查询?

非常感谢您的想法

【问题讨论】:

  • 支持嵌套查询...因此,您可以先将客户过滤到表别名中,然后使用“More_information”加入该表。同样,您可以在客户端左连接之前将“更多信息”过滤到表别名中。

标签: mysql sql left-join


【解决方案1】:

只需添加到您的 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 将有助于提高性能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 2015-01-10
    • 2012-08-22
    • 2014-07-30
    • 1970-01-01
    相关资源
    最近更新 更多