Jérôme
Jérôme

Reputation: 2090

How do I get more than one column from a SELECT subquery?

Here is my problem :

I have 3 tables : account, account_event and account_subscription

account contains details like : company_name, email, phone, ...

account_event contains following events : incoming calls, outgoing calls, visit, mail

I use account_subscription in this query to retrieve the "prospects" accounts. If the account does not have a subscription, it is a prospect.

What I am using right now is the following query, which is working fine :

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

You can see that it returns the last_visit_date.

I would like to modify my query to return the last event details (last contact). I need the event_date AND the event_type.

So I tried the following query which is NOT working because apparently I can't get more than one column from my select subquery.

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

I tried a lot of solutions around joins but my problem is that I need to get the last event for each account.

Any ideas?

Thank you in advance.

Jerome

Upvotes: 1

Views: 4734

Answers (2)

9000
9000

Reputation: 40884

Try moving the subquery to from part and alias it; it will look as just another table and you'll be able to extract more than one column from it.

Upvotes: 0

Quassnoi
Quassnoi

Reputation: 425331

Get a PRIMARY KEY in a subquery and join the actual table on it:

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

Upvotes: 1

Related Questions