Mysql 链接4个SQL表的困难

Mysql 链接4个SQL表的困难,mysql,sql,Mysql,Sql,我目前正在使用一个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

我目前正在使用一个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`
查询运行时不会出错,但是
电子邮件地址
列中填充了空值

以下是每个表的字段:

`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"
这返回了一个
电子邮件地址\u id

c3e14c9e-b6bc-b2d0-6dbf-51669e83bff4

这链接到
crm
电子邮件地址
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\u contacts
中的
contact\u id
值与
电子邮件地址.id
不匹配。这可以是:

  • 后一张桌子是空的
  • 没有火柴
  • 您对联接使用了错误的列

如果让我猜的话,那将是最后一次。根据其他表使用的命名约定,我希望在某个地方有一个名为
email\u address\u id
的列。

第四个连接看起来不正确,请检查表的DDL以及
email\u address
accounts\u contacts
之间的链接,换句话说,连接键是什么。您现在正在使用
电子邮件地址.id
。通常它会与
联系人id
链接电子邮件地址的id是哪个表的外键?@Alexander我目前正试图弄清楚,但几乎没有成功:(我以为是帐户id,但我创建了一个测试帐户。我可以找到我的测试电子邮件,但该id既不指向我的联系人id,也不指向我的帐户id。有什么办法可以搜索吗?我目前正在尝试查找联系人/帐户和电子邮件地址之间的链接。只需设置一个测试帐户并搜索我的id出现的位置。它既不显示也不显示。)联系人id和帐户id与
电子邮件地址中的id不匹配。一定有某个地方缺少链接,但我找不到任何与
电子邮件地址id类似的内容。嗨,戈登,我相信我找到了链接,但可能需要加入另一个表。我会用这些额外信息更新我的问题。我已经解决了这个问题s我自己,但我会+1你,因为你的可能原因清单让我找到了解决办法。