Как получить более одного столбца из подзапроса SELECT? - PullRequest
1 голос
/ 30 марта 2011

Вот моя проблема:

У меня есть 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_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 ]

1 голос
/ 30 марта 2011

Получите 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
0 голосов
/ 30 марта 2011

Попробуйте переместить подзапрос в from часть и назовите его; она будет выглядеть как просто другая таблица, и вы сможете извлечь из нее более одного столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...