我当前正在使用一个 SQL 查询,它将 3 个表连接在一起以生成报告。我需要将第四个表中的数据附加到此。
这是我当前的查询,工作正常:
SELECT `contact_id`,`account_id`,`last_name`,`first_name`,`name`,`phone_work`,`billing_address_street`,`billing_address_postalcode`,`phone_office`
FROM `crm`.`contacts`
LEFT JOIN `crm`.`accounts_contacts` ON `crm`.`contacts`.`id`=`crm`.`accounts_contacts`.`contact_id`
LEFT JOIN `crm`.`accounts` ON `crm`.`accounts_contacts`.`account_id`=`crm`.`accounts`.`id`
这是我尝试更新的查询,以从第四个表中引入电子邮件的附加字段:
SELECT `contact_id`,`account_id`,`last_name`,`first_name`,`name`,`phone_work`,`billing_address_street`,`billing_address_postalcode`,`phone_office`,`email_address`
FROM `crm`.`contacts`
LEFT JOIN `crm`.`accounts_contacts` ON `crm`.`contacts`.`id`=`crm`.`accounts_contacts`.`contact_id`
LEFT JOIN `crm`.`accounts` ON `crm`.`accounts_contacts`.`account_id`=`crm`.`accounts`.`id`
LEFT JOIN `crm`.`email_addresses` ON `crm`.`accounts_contacts`.`contact_id`=`crm`.`email_addresses`.`id`
查询运行时没有错误,但是 email_address
列填充了空值。
以下是每个表的字段:
`accounts_contacts`
id
contact_id
account_id
`email_addresses`
id
email_address
有人知道我哪里出错了吗?如果我遗漏了任何必要的信息,请告诉我,我会进行编辑。
<小时/>额外信息:
事实证明,我的联系人与其电子邮件地址之间缺少链接。我创建了一个测试用户来调查此问题,这就是我的发现:
首先我找到了我的新用户的联系 ID:
`crm`.`contacts`.`id` = bf3259ec-65eb-1e65-efd1-51669e45cdb0
然后我找到了一个包含这个id的表:
SELECT * FROM `crm`.`email_addr_bean_rel` WHERE bean_id = "bf3259ec-65eb-1e65-efd1-51669e45cdb0"
这返回了一个email_address_id
c3e14c9e-b6bc-b2d0-6dbf-51669e83bff4
此链接到crm
。email_addresses
。id
最佳答案
如果使用表别名,您的查询将更易于阅读:
SELECT`contact_id`, `account_id`, `last_name`, `first_name`, `name`, `phone_work`,
`billing_address_street`, `billing_address_postalcode`, `phone_office`,
`email_address`
FROM `crm`.`contacts` c LEFT JOIN
`crm`.`accounts_contacts` ac
ON c.`id` = ac.`contact_id` LEFT JOIN
`crm`.`accounts` a
ON ac.`account_id` = a.`id` LEFT JOIN
`crm`.`email_addresses` ea
ON ac.`contact_id` = ea.`id`
account_contacts
中没有任何 contact_id
值与 email_address.id
匹配。这可能是:
- 后一个表为空。
- 没有匹配项。
- 您使用了错误的连接列。
如果我必须猜的话,这将是最后一个。根据其余表使用的命名约定,我希望在某处有一个名为 email_address_id
的列。
关于mysql - 链接 4 个 SQL 表有困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29673720/