Mysql查询加入5个表

Posted

技术标签:

【中文标题】Mysql查询加入5个表【英文标题】:Mysql query joining 5 tables 【发布时间】:2020-01-23 10:12:20 【问题描述】:

我正在尝试加入 5 个表格,在这些表格中,我希望根据相同的合同 ID 在不同的表格中提及不同的货币。 当我加入任何三个表时,它会给我结果,但是当我在查询中添加一个表时 服务器变得无响应,直到我不得不终止进程。

请帮助我在哪里做错了。

SELECT c.department_id,
  c.contract_id,
  c.seller_id,
  c.buyer_id,
  c.contract_ratecurrency AS contractcurrency,
  b.currency_id           AS billcurrency,
  s.saleinv_currency      AS saleinvcurrency,
  cm.currency_id          AS commissioncurrency,
  sl.currency_id          AS cmlogcurrency,
  c.contract_iscancel
FROM tbl_contracts C
JOIN tbl_contract_bill b ON c.contract_id=b.contract_id
JOIN tbl_contract_saleinvoice s ON c.contract_id =s.contract_id
JOIN tbl_commission_payment cm ON c.department_id = cm.department_id
JOIN tbl_saleinvoice_commission_log sl ON c.department_id = sl.department_id
WHERE (c.contract_ratecurrency <> s.saleinv_currency
       OR c.contract_ratecurrency     <> b.currency_id
       OR s.saleinv_currency          <> b.currency_id
       OR cm.currency_id              <> sl.currency_id
       OR c.contract_ratecurrency     <> cm.currency_id
       OR s.saleinv_currency          <> cm.currency_id
       OR b.currency_id               <> cm.currency_id)
AND (c.contract_iscancel        =0)

requried result should be

ccontractid,csellerid,cbuyerid,ccurrency,bcurrency,scurrency,cmcurrency,slcurrency
101,25,50,1,1,2,3,1
102,28,16,2,3,1,3,2



【问题讨论】:

你能解释一下这个查询的目的吗? 实际上我想在所有 5 个表中获得货币差异 请阅读此meta.***.com/questions/271055/… 特别注意查询性能部分。然后,请通过editing 向我们提供更多信息。 您要添加什么条件?有关表格大小和类型的信息也会有所帮助。 请提供EXPLAIN SELECT .. 【参考方案1】:

您似乎遇到了性能问题。要优化您的数据库结构,您有多种选择:

    在您的键上添加索引。

    让我们看看你的加入声明:

    加入 tbl_saleinvoice_commission_log sl ON c.department_id = sl.department_id

    在 department_id 上添加聚集索引 tbl_saleinvoice_commission_log 表将帮助你很多 表现明智。更多信息可以查看this链接。

    分区是另一种提高性能的方法,但您需要检查您的数据库结构,看看它是否适合您。更多信息可以查看this链接。

另外,我相信您的表格是一对多的,因此您可能需要检查您尝试检索的行数。如果您的数据库服务器无法处理大量行,您可能需要改进数据库守护程序的硬件或 CPU 使用限制。

【讨论】:

不要在PARTITIONing上浪费时间;它对那个查询没有帮助。

以上是关于Mysql查询加入5个表的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 查询慢,按限制按顺序分组

MYSQL:用union查询2个表很慢,如何改进?

从 6 个表构建一个 mysql 查询以减少 php 的使用

跨 2 个表的 Mysql SQL 查询 - 不知道如何正确执行

mysql查询加入,比较两个表并返回第一个表中的所有记录

使用 graphql 查询连接 3 个表