如何从SELECT子查询中获取多个列?

时间:2011-03-30 12:44:46

标签: mysql select subquery

这是我的问题:

我有3个表:account,account_event和account_subscription

帐户包含以下详细信息:company_name,email,phone,...

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_date event_type

所以我尝试了以下不起作用的查询,因为显然我不能从我的select子查询中获得多个列。

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

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

有什么想法吗?

提前谢谢。

杰罗姆

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

尝试将子查询移动到from部分并将其别名;它看起来只是另一个表,你可以从中提取多个列。