【发布时间】:2015-04-01 17:52:34
【问题描述】:
我正在尝试创建一个包含 5 个表的视图,但是在尝试将最后两个表连接在一起时遇到了问题。
这是我当前的 MySQL 查询:
CREATE VIEW s_view AS
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
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
INNER JOIN EMAIL_ADDR_BEAN_REL AS ER ON ER.bean_id = A.id
INNER JOIN EMAIL_ADDRESSES AS EA ON ER.email_address_id = EA.id
我的表格是按以下方式设置的:
帐户(id、first_name、last_name 等)
联系人(身份证、姓名等)
ACCOUNT_CONTACTS(id、account_id、contact_id)
EMAIL_ADDR_BEAN_REL(id、bean_id(与 account_id/contact_id 相同)、email_address_id)
EMAIL_ADDRESSES (email_address_id, email_address)
我遇到的问题是 EMAIL_ADDR_BEAN_REL 表有一个可以引用 account_id 或 contact_id 的 bean_id。因此,当我加入表格时,它只返回帐户电子邮件地址,但是我希望它同时返回帐户电子邮件地址和联系人电子邮件地址?
我感觉这是我加入牌桌的方式有问题,但我不确定如何继续前进?
谢谢!
【问题讨论】:
-
怎么知道bean_id是引用account_id还是contact_id?是否有另一个字段指定或只是存在或缺乏?
-
@PeterBowers 在该表中还有另一个字段:bean_module 指定它是帐户还是联系人。我假设在编写我的选择时,我需要两个电子邮件字段,一个用于帐户,一个用于联系人,我只是不知道该怎么做:S
-
是否总是有帐户电子邮件地址和联系人电子邮件地址?或者一个或两个都可以为空?
-
@BK435 这些字段可以为空
-
您能否确认您现有的查询(去掉顶部的“CREATE VIEW”内容)是否在您的系统中生成行?由于我此时添加的只是
LEFT JOIN(实际上将您的INNER JOIN之一更改为LEFT),因此我的查询应该返回可能更多的行,而且永远不会更少......
标签: mysql sql database join view