Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何从SELECT子查询中获取多个列?_Mysql_Select_Subquery - Fatal编程技术网

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

Mysql 如何从SELECT子查询中获取多个列?,mysql,select,subquery,Mysql,Select,Subquery,我的问题是: 我有3个表:account、account\u事件和account\u订阅 帐户包含公司名称、电子邮件、电话等详细信息 帐户事件包含以下事件:传入呼叫、传出呼叫、访问、邮件 我在此查询中使用帐户\订阅检索“潜在客户”帐户。如果该帐户没有订阅,则为潜在客户 我现在使用的是以下查询,运行良好: SELECT `account`.*, (SELECT event_date FROM clients.account_event cae WHERE cae.acc

我的问题是:

我有3个表:account、account\u事件和account\u订阅

帐户包含公司名称、电子邮件、电话等详细信息

帐户事件包含以下事件:传入呼叫、传出呼叫、访问、邮件

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

我现在使用的是以下查询,运行良好:

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
您可以看到它返回上次访问日期

我想修改我的查询以返回上次事件详细信息(上次联系人)。我需要事件日期和事件类型

因此,我尝试了以下查询,但该查询不起作用,因为显然我无法从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
我尝试了很多关于连接的解决方案,但我的问题是我需要获得每个帐户的最后一个事件

有什么想法吗

先谢谢你


Jerome

在子查询中获取一个
主键
,并在其上连接实际表:

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

在子查询中获取一个
主键
,并在其上联接实际表:

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子句的改进!感谢您提供了这个非常好的解决方案和WHERE子句改进!