【问题标题】:How to retrieve data from mysql database joining 5 different tables如何从连接 5 个不同表的 mysql 数据库中检索数据
【发布时间】:2017-02-16 14:04:10
【问题描述】:

我正在尝试从 5 个不同的表中检索 mysql 数据库中的数据,但它没有按应有的方式工作,并且没有显示任何内容。

表格是:

  • site_info
  • site_coordinates
  • owner_info
  • 分包商信息
  • 公司信息

网站信息:

  • 站点ID
  • 公司ID -siteNAME
  • 所有者ID
  • 分包商ID
  • 设备类型

站点坐标:

  • 站点ID

  • 纬度

  • 经度

  • 身高

所有者信息:

  • 所有者ID
  • 所有者名称
  • 所有者联系方式

分包商信息:

  • 分包商ID
  • 分包商公司
  • 分包商名称
  • 分包商联系方式

公司信息:

  • 公司ID
  • 公司名称

mysql查询:

select 
     site_info.siteID,site_info.siteNAME ,site_info.equipmentTYPE,site_coordinates.latitude,site_coordinates.longitude,site_coordinates.height ,owner_info.ownerNAME,owner_info.ownerCONTACT,company_info.companyNAME,subcontractor_info.subcontractorCOMPANY,subcontractor_info.subcontractorNAME,subcontractor_info.subcontractorCONTACT   
from `site_info`
INNER JOIN `owner_info`
  on site_info.ownerID = owner_info.ownerID
INNER JOIN `company_info`
  on site_info.companyID = company_info.companyID
INNER JOIN `subcontractor_info`
  on site_info.subcontractorID = subcontractor_info.subcontractorID
INNER JOIN `site_coordinates`
  on site_info.siteID=site_coordinates.site_id
where owner_info.ownerID = 159

我的错误在哪里,有更好的方法吗?

【问题讨论】:

  • 尽量让每个 INNER JOIN 都成为 LEFT JOIN,如果您找回记录,请告诉我们。
  • 这就是错误函数的用途。
  • 您是否遇到任何错误,或者只是没有返回数据?
  • 没有错误 phpmyadmin 显示此消息 MySQL 返回了一个空结果集(即零行)。 (查询耗时 0.0005 秒。)
  • 好的,所以除了不返回任何数据之外,您的查询没有问题。我们无法告诉您原因,我们不知道您数据库的内容...

标签: php mysql inner-join


【解决方案1】:

我解决它只需要更改为 LEFT JOIN 。

所以更新后的查询看起来:

select 
site_info.siteID,site_info.siteNAME ,site_info.equipmentTYPE,site_coordinates.latitude,site_coordinates.longitude,site_coordinates.height ,owner_info.ownerNAME,owner_info.ownerCONTACT,company_info.companyNAME,subcontractor_info.subcontractorCOMPANY,subcontractor_info.subcontractorNAME,subcontractor_info.subcontractorCONTACT from `site_info`
LEFT JOIN `owner_info`
on site_info.ownerID = owner_info.ownerID 
LEFT JOIN `company_info` 
on site_info.companyID = company_info.companyID
LEFT JOIN `subcontractor_info` 
on site_info.subcontractorID = subcontractor_info.subcontractorID
LEFT JOIN `site_coordinates` 
on site_info.siteID=site_coordinates.siteID 
where owner_info.ownerID = 159 

感谢您的 cmets 和回答

【讨论】:

  • 关于owner_info,LEFT JOIN x... WHERE x...等同于INNER JOIN x...
【解决方案2】:

查询在语法上是正确的。由于您面临输出问题,请检查您的关系代数。您是否在它们之间使用了正确的 JOIN 条件?如果两个表中的每一个都有一个共同的属性,您可以执行自然联接,即不提供条件,共同的属性将被整理出来,我会使用 ALIAS 'AS' 关键字编写这样复杂的查询。

SELECT
     site_info.siteID,
     site_info.siteNAME,
     site_info.equipmentTYPE,
     site_coordinates.latitude,
     site_coordinates.longitude,
     site_coordinates.height,
     owner_info.ownerNAME,
     owner_info.ownerCONTACT,
     company_info.companyNAME,
     subcontractor_info.subcontractorCOMPANY,
     subcontractor_info.subcontractorNAME,
     subcontractor_info.subcontractorCONTACT        
FROM `site_info` AS SI JOIN `owner_info` AS OI
  ON SI.ownerID = OI.ownerID 
  JOIN `company_info` AS CI
  ON SI.companyID = CI.companyID 
  JOIN `subcontractor_info` AS SUBI
  ON SI.subcontractorID = SUBI.subcontractorID 
  JOIN `site_coordinates` AS SC
  ON SI.siteID=SC.site_id
WHERE owner_info.ownerID = 159;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多