2015-04-06 2 views
0

В настоящее время я вид, который соединяет несколько таблиц вместе, таблицы устанавливаются следующим образом:Создание представления?

ACCOUNTS (id, first_name, last_name, etc.) 

CONTACTS (id, name, etc.) 

ACCOUNT_CONTACTS (id, account_id, contact_id) 

EMAIL_ADDR_BEAN_REL (id, bean_id (same as account_id/contact_id), email_address_id) 

EMAIL_ADDRESSES (email_address_id, email_address) 

Однако у меня есть две таблицы, которые я объединятся, которые могут иметь несколько сообщений электронной почты, связанные с одним идентификатором, здесь является примером структуры:

стол: EMAIL_ADDR_BEAN_REL

id  email_address_id  bean_id 
1   2d5b8    61720 
2   14355b    61720 

стол: EMAIL_ADDRESSES

id   email_address 
2db58  [email protected] 
14355b  [email protected] 

При создании моего представления я хочу, чтобы иметь возможность получать эти несколько писем, связанных с одним пользователем. В настоящее время это мой код для вида, который только получает одну электронную почту:

SELECT AC.id, A.id AS account_id, A.name, A.description, A.industry, A.phone_fax, A.phone_office, A.shipping_address_street, A.shipping_address_city, A.shipping_address_state, A.shipping_address_postalcode, A.shipping_address_country, C.id AS contact_id, C.first_name, C.last_name, C.title, C.department, C.phone_home, C.phone_mobile, C.phone_work, C.primary_address_street, C.primary_address_city, C.primary_address_state, C.primary_address_postalcode, C.primary_address_country, EA.email_address, EA_C.email_address as email_contact 
FROM ACCOUNTS A 
INNER JOIN ACCOUNTS_CONTACTS AS AC ON A.id = AC.account_id 
INNER JOIN CONTACTS AS C ON C.id = AC.contact_id 
LEFT JOIN EMAIL_ADDR_BEAN_REL AS ER ON ER.bean_id = A.id 
AND ER.bean_module = "Accounts" 
LEFT JOIN EMAIL_ADDR_BEAN_REL AS ER_C ON ER_C.bean_id = C.id 
AND ER_C.bean_module = "Contacts" 
LEFT JOIN EMAIL_ADDRESSES AS EA ON ER.email_address_id = EA.id 
LEFT JOIN EMAIL_ADDRESSES AS EA_C ON ER_C.email_address_id = EA_C.id 

Этот запрос возвращает две строки, связанные с тем же пользователем, имеют точно такую ​​же информацию по адресу электронной почты, за исключением, я хотел бы иметь второй адрес электронной почты (или дополнительные письма), добавленные в ту же строку, и не создаются дополнительные строки.

Помощь была бы очень признательна!

ответ

0
SELECT ... GROUP_CONCAT(email_address) ... 
    FROM ... 
    GROUP BY A.id; 
+0

Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. – Jatin

+0

@ Jatin: Да, так оно и есть. Вопрос состоял в том, что «я бы хотел, чтобы второй адрес электронной почты (или дополнительные электронные письма) был добавлен в ту же строку, и у вас не было создано дополнительных строк». Если не написать весь код для него, это даст один недостающий ключ - GROUP_CONCAT' плюс 'GROUP BY'. –

+0

@RickJames спасибо, это работает чудесно, однако я хочу, чтобы каждое электронное письмо было в отдельной колонке. Так, например: email_1: [email protected], email_2: [email protected], email_3: [email protected] и т. Д. Это помещает все электронные письма в один столбец, разделенные запятой. – dantheman

Смежные вопросы