【问题标题】:How do I get more than one column from a SELECT subquery?如何从 SELECT 子查询中获取多个列?
【发布时间】:2011-07-26 01:52:50
【问题描述】:

这是我的问题:

我有 3 个表:account、account_event 和 account_subscription

帐户包含以下详细信息:公司名称、电子邮件、电话...

account_event包含以下事件:来电、去电、访问、邮件

我在此查询中使用 account_subscription 来检索“潜在客户”帐户。如果该帐户没有订阅,则为潜在客户。

我现在使用的是以下查询,它工作正常:

SELECT `account`.*,
    (SELECT event_date
     FROM clients.account_event cae
     WHERE cae.account_id = account.id
           AND cae.event_type = 'visit'
           AND cae.event_done = 'Y'
     ORDER BY event_date DESC
     LIMIT 1) last_visit_date
FROM (`clients`.`account`)
WHERE (SELECT count(*)
       FROM clients.account_subscription cas
       WHERE cas.account_id = account.id) = 0
ORDER BY `last_visit_date` DESC

您可以看到它返回 last_visit_date

我想修改我的查询以返回最后一个事件的详细信息(最后一个联系人)。我需要 event_dateevent_type

所以我尝试了以下查询,但它不起作用,因为显然我无法从我的选择子查询中获得超过一列。

SELECT `account`.*,
        (SELECT event_date last_contact_date, event_type last_contact_type
         FROM clients.account_event cae
         WHERE cae.account_id = account.id
               AND cae.event_done = 'Y'
         ORDER BY event_date DESC
         LIMIT 1)
FROM (`clients`.`account`)
WHERE (SELECT count(*)
       FROM clients.account_subscription cas
       WHERE cas.account_id = account.id) = 0
ORDER BY `last_visit_date` DESC

我尝试了很多关于连接的解决方案,但我的问题是我需要获取每个帐户的最后一个事件。

有什么想法吗?

提前谢谢你。

杰罗姆

【问题讨论】:

    标签: mysql select subquery


    【解决方案1】:

    在子查询中获取PRIMARY KEY 并在其上加入实际表:

    SELECT  a.*, ae.*
    FROM   account a
    JOIN   account_event ae
    ON     ae.id =
           (
           SELECT  id
           FROM    account_event aei
           WHERE   aei.account_id = a.id
                   AND aei.event_done = 'Y'
           ORDER BY
                   event_date DESC
           LIMIT 1
           )
    WHERE  a.id NOT IN
           (
           SELECT  account_id
           FROM    account_subscription
           )
    ORDER BY
           last_visit_date DESC
    

    【讨论】:

    • 感谢您提供这个非常好的解决方案和 WHERE 子句改进!
    【解决方案2】:

    尝试将子查询移动到from 部分并为其设置别名;它看起来就像另一个表,您可以从中提取多个列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      • 2017-09-22
      • 2018-05-08
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      相关资源
      最近更新 更多