mysql - 链接 4 个 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`.`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

此链接到crmemail_addressesid

最佳答案

如果使用表别名,您的查询将更易于阅读:

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/

相关文章:

mysql - 如何根据vb.net中的选择查询设置 ListView 中复选框的值

mysql - dBase 表达式 类似于 MYSQL 中没有

php - 我可以使用 usort 函数仅显示第二高(或第三……依此类推)值吗?

MySQL 排行榜

php和mysql独特的串行

sql - 将存储过程执行到动态临时表中

c# - 从 .net 存储 10 - 1 亿个模拟输出的最佳方式(SQL 与平面文件)

MySql加入多选子查询

php - 从sql数据库获取月、日、年php时间

MySQL 多查询设置