Выберите несколько значений столбца в одном запросе - оракул

У меня есть две таблицы, в которых хранится информация об электронной почте:

  • ЭЛ. АДРЕС
  • АДРЕС ЭЛЕКТРОННОЙ ПОЧТЫ

ЭЛЕКТРОННАЯ ПОЧТА имеет:

  • электронный идентификатор
  • отметка времени
  • и другая информация, которая нам не нужна

EMAIL_ADDRESS имеет:

  • ID (внешний ключ ссылается на EMAIL.ID)
  • АДРЕС ЭЛЕКТРОННОЙ ПОЧТЫ
  • ТИП (до, от)

Скажем, у меня есть 6 строк в EMAIL - запрос должен возвращать идентификатор, отметку времени, адрес и адрес.

На данный момент у меня есть это:

SELECT ea.EMAIL_ADDRESS, e.ID, e.sent_date
FROM EMAIL_ADDRESS ea, CHANN_EMAIL e
WHERE e.ID=ea.id
AND ea.TYPE in ('to','from')

Это возвращает 12 строк в формате: -to, ID, date -from, ID, date

Каким будет запрос, чтобы у меня было 6 строк с: -to, from, ID, date


person ghost_1989    schedule 04.02.2014    source источник
comment
Есть ли у нас только две строки (одна с типом «кому», а другая с типом «от») в таблице EMAIL_ADDRESS для каждого идентификатора EMAIL?   -  person Dipendu Paul    schedule 04.02.2014
comment
Да, ваши примеры данных точны, спасибо всем, кто ответил :)   -  person ghost_1989    schedule 04.02.2014


Ответы (3)


Вы должны разделить таблицу EMAIL_ADDRESS на два представления:

SELECT eat.EMAIL_ADDRESS as to ,ea.EMAIL_ADDRESS as from, e.ID, e.sent_date
FROM EMAIL_ADDRESS ea, CHANN_EMAIL e,EMAIL_ADDRESS eat
WHERE e.ID=ea.id and e.ID=eat.id
AND ea.TYPE in ('from') AND eat.TYPE in ('to')
person Reza ArabQaeni    schedule 04.02.2014

попробуйте использовать GROUP BY e.ID или GROUP BY ea.id

person verbumSapienti    schedule 04.02.2014

Пример данных: таблица электронной почты:

| email_id |     timestamp          |
-------------------------------
| 1        | 2014-02-14 17:30:32.803|
| 2        | 2014-02-24 17:30:32.803|

таблица адресов электронной почты:

| id | email_add | type |
-------------------------
| 1  |[email protected]| to   |
| 1  |[email protected]| from |
| 2  |[email protected]| to   |
| 2  |[email protected]| from |

Запрос:

SELECT tab.email_id, MAX([to]) AS [to], MAX([from]) AS [from], MAX(tab.timestamp) AS [time] FROM
(SELECT e.email_id, 
CASE WHEN type= 'to' THEN ea.email_add ELSE NULL END AS [to],
CASE WHEN type= 'from' THEN ea.email_add ELSE NULL END AS [from], e.timestamp
FROM email e
INNER JOIN email_address ea
ON e.email_id = ea.id) tab
GROUP BY tab.email_id

Результат:

|email_id|    to     |  from     |   time                |
----------------------------------------------------------
|   1    |[email protected]|[email protected]|2014-02-14 17:30:32.803|
|   2    |[email protected]|[email protected]|2014-02-24 17:30:32.803|        
person Dipendu Paul    schedule 04.02.2014